diff options
author | Bruno Haible <bruno@clisp.org> | 2007-03-28 21:50:51 +0000 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2007-03-28 21:50:51 +0000 |
commit | e213ad01832156fe83f3455195bfe3e1923637de (patch) | |
tree | 7081b2fe66389212382861814f7aca3866185f7e /lib | |
parent | fbdb50df6fdb8a013db967d52c14131c5c6db234 (diff) | |
download | gnulib-e213ad01832156fe83f3455195bfe3e1923637de.tar.gz |
Distinguish invalid and incomplete UTF-8 input, and set errno accordingly.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/striconveh.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/lib/striconveh.c b/lib/striconveh.c index 8bee60ae8b..4da14722e6 100644 --- a/lib/striconveh.c +++ b/lib/striconveh.c @@ -479,16 +479,13 @@ mem_cd_iconveh_internal (const char *src, size_t srclen, int n; int m; - n = u8_mbtouc (&uc, (const uint8_t *) in1ptr, in1size); - if (uc == 0xfffd - && !(n >= 3 - && (uint8_t)in1ptr[0] == 0xEF - && (uint8_t)in1ptr[1] == 0xBF - && (uint8_t)in1ptr[2] == 0xBD)) + n = u8_mbtoucr (&uc, (const uint8_t *) in1ptr, in1size); + if (n < 0) { + errno = (n == -2 ? EINVAL : EILSEQ); + n = u8_mbtouc (&uc, (const uint8_t *) in1ptr, in1size); in1ptr += n; in1size -= n; - errno = EILSEQ; res1 = (size_t)(-1); incremented1 = true; break; |