Browse Source

i18n: Fix mbrtowc function to handle 0xc0 and 0xc1 sequence.

When the first byte of the multibyte sequence start with 0xc0
or 0xc1, the whole sequence is invalid, so the return value must
be -1 (instead of -2).
Fix bug #686.

Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com>
Acked-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Carmelo Amoroso 15 years ago
parent
commit
cdc25d86e3
1 changed files with 2 additions and 1 deletions
  1. 2 1
      libc/misc/wchar/wchar.c

+ 2 - 1
libc/misc/wchar/wchar.c

@@ -488,7 +488,8 @@ size_t attribute_hidden _wchar_utf8sntowcs(wchar_t *__restrict pwc, size_t wn,
 #ifdef __UCLIBC_MJN3_ONLY__
 #warning TODO: Fix range for 16 bit wchar_t case.
 #endif
-			if ( ((unsigned char)(s[-1] - 0xc0)) < (0xfe - 0xc0) ) {
+			if (( ((unsigned char)(s[-1] - 0xc0)) < (0xfe - 0xc0) ) &&
+			(((unsigned char)s[-1] != 0xc0 ) && ((unsigned char)s[-1] != 0xc1 ))) {
 				goto START;
 			}
 		BAD: