Mail Archives: djgpp-workers/2005/05/03/14:55:30
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-workers-bounces using -f
|
From: | <ams AT ludd DOT ltu DOT se>
|
Message-Id: | <200505030858.j438wvU7006744@speedy.ludd.ltu.se>
|
Subject: | Bug 000366 (mbstowcs causes SIGSEGV when passed a NULL pointer)
|
To: | DJGPP-WORKERS <djgpp-workers AT delorie DOT com>
|
Date: | Tue, 3 May 2005 10:58:57 +0200 (CEST)
|
X-Mailer: | ELM [version 2.4ME+ PL78 (25)]
|
MIME-Version: | 1.0
|
X-ltu-MailScanner-Information: | Please contact the ISP for more information
|
X-ltu-MailScanner: | Found to be clean
|
X-MailScanner-From: | ams AT ludd DOT ltu DOT se
|
Reply-To: | djgpp-workers AT delorie DOT com
|
Patch including test programs for this bug (pasted):
Index: djgpp/src/libc/ansi/locale/mbstowcs.c
===================================================================
RCS file: /cvs/djgpp/djgpp/src/libc/ansi/locale/mbstowcs.c,v
retrieving revision 1.3
diff -p -u -r1.3 mbstowcs.c
--- djgpp/src/libc/ansi/locale/mbstowcs.c 17 Oct 2002 23:00:24 -0000
1.3
+++ djgpp/src/libc/ansi/locale/mbstowcs.c 3 May 2005 18:51:07 -0000
@@ -1,3 +1,4 @@
+/* Copyright (C) 2005 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 2001 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
#include <stdlib.h>
@@ -5,9 +6,14 @@
size_t
mbstowcs(wchar_t *wcs, const char *s, size_t n)
{
- size_t i;
- for (i=0; s[i] && (i+1<n); i++)
+ size_t i = 0;
+ while (i < n)
+ {
wcs[i] = s[i];
- wcs[i] = 0;
+ i++;
+ }
+ if (i < n)
+ wcs[i] = 0;
+
return i;
}
Index: djgpp/src/libc/ansi/locale/wcstombs.c
===================================================================
RCS file: /cvs/djgpp/djgpp/src/libc/ansi/locale/wcstombs.c,v
retrieving revision 1.3
diff -p -u -r1.3 wcstombs.c
--- djgpp/src/libc/ansi/locale/wcstombs.c 17 Oct 2002 23:00:24 -0000
1.3
+++ djgpp/src/libc/ansi/locale/wcstombs.c 3 May 2005 18:51:07 -0000
@@ -1,3 +1,4 @@
+/* Copyright (C) 2005 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 2001 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
#include <stdlib.h>
@@ -5,9 +6,14 @@
size_t
wcstombs(char *s, const wchar_t *wcs, size_t n)
{
- size_t i;
- for (i=0; wcs[i] && (i+1<n); i++)
+ size_t i = 0;
+ while (i < n)
+ {
s[i] = wcs[i];
- s[i] = 0;
+ i++;
+ }
+ if (i < n)
+ s[i] = 0;
+
return i;
}
Index: djgpp/tests/libc/ansi/stdlib/makefile
===================================================================
RCS file: /cvs/djgpp/djgpp/tests/libc/ansi/stdlib/makefile,v
retrieving revision 1.3
diff -p -u -r1.3 makefile
--- djgpp/tests/libc/ansi/stdlib/makefile 8 Jun 2001 10:03:33 -0000
1.3
+++ djgpp/tests/libc/ansi/stdlib/makefile 3 May 2005 18:51:08 -0000
@@ -2,10 +2,12 @@ TOP=../..
SRC += env.c
SRC += getenv.c
+SRC += mbstowcs.c
SRC += shell.c
SRC += strtod.c
SRC += system.c
SRC += system2.c
SRC += tmalloc.c
+SRC += wcstombs.c
include $(TOP)/../makefile.inc
Index: djgpp/tests/libc/ansi/stdlib/mbstowcs.c
===================================================================
RCS file: djgpp/tests/libc/ansi/stdlib/mbstowcs.c
diff -N djgpp/tests/libc/ansi/stdlib/mbstowcs.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ djgpp/tests/libc/ansi/stdlib/mbstowcs.c 3 May 2005 18:51:08 -0000
@@ -0,0 +1,12 @@
+#include <stdlib.h>
+
+int main(void)
+{
+ size_t len;
+
+ char s[] = "A";
+
+ len = mbstowcs(NULL, s, 0);
+
+ return 0;
+}
Index: djgpp/tests/libc/ansi/stdlib/wcstombs.c
===================================================================
RCS file: djgpp/tests/libc/ansi/stdlib/wcstombs.c
diff -N djgpp/tests/libc/ansi/stdlib/wcstombs.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ djgpp/tests/libc/ansi/stdlib/wcstombs.c 3 May 2005 18:51:08 -0000
@@ -0,0 +1,12 @@
+#include <stdlib.h>
+
+int main(void)
+{
+ size_t len;
+
+ wchar_t ws[] = L"A";
+
+ len = wcstombs(NULL, ws, 0);
+
+ return 0;
+}
Right,
MartinS
- Raw text -