diff options
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 0000000000..54c6be2f63 --- /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" |