diff options
author | Ulrich Drepper <drepper@gmail.com> | 2011-05-14 11:37:36 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-05-14 11:37:36 -0400 |
commit | 98d76b46d2db565b22be647d611cc2649ba6ff87 (patch) | |
tree | 3b9b043995b0b9e9a4c4c0980e5ff5781fc948cf /iconvdata/bug-iconv8.c | |
parent | 32ad1972a8e458a555c58ca28d272ef7009d3514 (diff) | |
download | glibc-98d76b46d2db565b22be647d611cc2649ba6ff87.zip glibc-98d76b46d2db565b22be647d611cc2649ba6ff87.tar.gz glibc-98d76b46d2db565b22be647d611cc2649ba6ff87.tar.bz2 |
Fix handling of conversion problem in CP932 module
Diffstat (limited to 'iconvdata/bug-iconv8.c')
-rw-r--r-- | iconvdata/bug-iconv8.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/iconvdata/bug-iconv8.c b/iconvdata/bug-iconv8.c new file mode 100644 index 0000000..54c6be2 --- /dev/null +++ b/iconvdata/bug-iconv8.c @@ -0,0 +1,43 @@ +// BZ 12601 +#include <stdio.h> +#include <errno.h> +#include <iconv.h> + +static int +do_test (void) +{ + iconv_t cd; + char in[] = "\x83\xd9"; + char out[256]; + char *inbuf; + size_t inbytesleft; + char *outbuf; + size_t outbytesleft; + size_t ret; + + inbuf = in; + inbytesleft = sizeof(in) - 1; + outbuf = out; + outbytesleft = sizeof(out); + + cd = iconv_open("utf-8", "cp932"); + ret = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); + iconv_close(cd); + + printf("result: %ld %d %ld %d\n", ret, errno, inbytesleft, inbuf[0]); + + /* + * result: -1 84 0 0 (84=EILSEQ) + * + * Error is returnd but inbuf is consumed. + * + * \x83\xd9 is valid shift-jis sequence but no character is assigned + * to it. + */ + + return (ret != -1 || errno != EILSEQ + || inbytesleft != 2 || inbuf[0] != in[0]); +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |