diff options
author | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-09-29 08:51:31 +0000 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-09-29 08:51:31 +0000 |
commit | cdc25d86e3dc7139db435ec79ed298445009f5ba (patch) | |
tree | e7f968473c7fdf6b72f10607e654602e73ac6b75 /libc/misc/wchar/wchar.c | |
parent | 01520fc86662ac9ed3bebbaabac893aa04afbc3e (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.c | 3 |
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: |