summaryrefslogtreecommitdiff
path: root/libc/misc/wchar/wchar.c
diff options
context:
space:
mode:
authorCarmelo Amoroso <carmelo.amoroso@st.com>2008-09-29 08:51:31 +0000
committerCarmelo Amoroso <carmelo.amoroso@st.com>2008-09-29 08:51:31 +0000
commitcdc25d86e3dc7139db435ec79ed298445009f5ba (patch)
treee7f968473c7fdf6b72f10607e654602e73ac6b75 /libc/misc/wchar/wchar.c
parent01520fc86662ac9ed3bebbaabac893aa04afbc3e (diff)
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>
Diffstat (limited to 'libc/misc/wchar/wchar.c')
-rw-r--r--libc/misc/wchar/wchar.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/libc/misc/wchar/wchar.c b/libc/misc/wchar/wchar.c
index 567be8585..6214243e3 100644
--- a/libc/misc/wchar/wchar.c
+++ b/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: