From 2b77087a48ea56e77fca5aeab478c922f6473d7c Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Sun, 10 Jan 2010 13:54:34 +0000 Subject: [PATCH] * libc/stdlib/mbtowc_r.c (__ascii_mbtowc): Disallow conversion of non-ASCII chars on Cygwin. * libc/stdlib/wctomb_r.c (__ascii_wctomb): Ditto. --- newlib/ChangeLog | 22 ++++++++++++++-------- newlib/libc/stdlib/mbtowc_r.c | 8 ++++++++ newlib/libc/stdlib/wctomb_r.c | 4 ++++ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 660e700ba..78ce466c6 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,9 @@ +2010-01-10 Corinna Vinschen + + * libc/stdlib/mbtowc_r.c (__ascii_mbtowc): Disallow conversion of + non-ASCII chars on Cygwin. + * libc/stdlib/wctomb_r.c (__ascii_wctomb): Ditto. + 2009-12-22 Eric Blake * libc/include/sys/unistd.h (suboptarg, getsubopt): Move... @@ -46,13 +52,13 @@ * libc/stdlib/atexit.c: Ditto. * libc/stdlib/on_exit.c: Ditto. -2009-12-17 Ralf Corsépius +2009-12-17 Ralf Corsépius * libc/include/machine/ieeefp.h: Rework __IEEE_*_ENDIAN handling. * libc/machine/arm/machine/endian.h: Remove (Conflicts with libc/include/machine/endian.h) -2009-12-17 Ralf Corsépius +2009-12-17 Ralf Corsépius * libc/include/machine/setjmp.h: Set up _JBLEN #ifdef __m68k__. @@ -74,11 +80,11 @@ and ETOOMANYREFS into general list as they are referenced by OpenGroup and needed by RTEMS. -2009-12-16 Ralf Corsépius +2009-12-16 Ralf Corsépius * libc/search/hcreate.c: Don't include (Unused). -2009-12-16 Ralf Corsépius +2009-12-16 Ralf Corsépius * libc/sys/rtems/machine/_types.h: New (Derived from machine/_default_types.h). @@ -366,16 +372,16 @@ * libc/locale/locale.c: Drop Cygwin-specific windows.h include. (loadlocale): Call __set_charset_from_codepage with 0 codepage. -2009-09-22 Ralf Corsépius +2009-09-22 Ralf Corsépius * libc/include/stdlib.h: Add posix_memalign. -2009-09-22 Ralf Corsépius +2009-09-22 Ralf Corsépius * configure.host (*-rtems*): Remove -DMISSING_SYSCALL_NAMES. Add -DHAVE_BLKSIZE, -D_NO_WORDEXP -D_NO_POPEN. -2009-09-22 Ralf Corsépius +2009-09-22 Ralf Corsépius * configure.host (m32c): Move setting -DABORT_PROVIDED to second "case $host". @@ -5453,7 +5459,7 @@ * libc/include/sys/unistd.h: Define all _SC_xxx values as required by SUSv3. Unify formatting. -2007-02-02 Ralf Corsépius +2007-02-02 Ralf Corsépius * libc/include/sys/errno.h: Add ECANCELED. diff --git a/newlib/libc/stdlib/mbtowc_r.c b/newlib/libc/stdlib/mbtowc_r.c index 863404fcb..f161385ed 100644 --- a/newlib/libc/stdlib/mbtowc_r.c +++ b/newlib/libc/stdlib/mbtowc_r.c @@ -47,6 +47,14 @@ _DEFUN (__ascii_mbtowc, (r, pwc, s, n, charset, state), if (n == 0) return -2; +#ifdef __CYGWIN__ + if ((wchar_t)*t >= 0x80) + { + r->_errno = EILSEQ; + return -1; + } +#endif + *pwc = (wchar_t)*t; if (*t == '\0') diff --git a/newlib/libc/stdlib/wctomb_r.c b/newlib/libc/stdlib/wctomb_r.c index 2c462ba63..d1ee4978d 100644 --- a/newlib/libc/stdlib/wctomb_r.c +++ b/newlib/libc/stdlib/wctomb_r.c @@ -40,7 +40,11 @@ _DEFUN (__ascii_wctomb, (r, s, wchar, charset, state), if (s == NULL) return 0; +#ifdef __CYGWIN__ + if ((size_t)wchar >= 0x80) +#else if ((size_t)wchar >= 0x100) +#endif { r->_errno = EILSEQ; return -1; -- 2.43.5