From c657f8b3ff63aab7badd86d8aaee3ebb5eb7f557 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 26 Mar 2003 08:10:58 +0000 Subject: Test for EUC-TW bug with too-short output buffers. --- iconvdata/bug-iconv4.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 iconvdata/bug-iconv4.c (limited to 'iconvdata/bug-iconv4.c') diff --git a/iconvdata/bug-iconv4.c b/iconvdata/bug-iconv4.c new file mode 100644 index 0000000000..f6bfebd39f --- /dev/null +++ b/iconvdata/bug-iconv4.c @@ -0,0 +1,78 @@ +/* Contributed by Jiro SEKIBA . */ +#include +#include +#include +#include +#include +#include + +#define UCS_STR "\x4e\x8c" /* EUC-TW 0xa2a2, EUC-JP 0x */ + +static const char *to_code; + +static bool +xiconv (iconv_t cd, int out_size) +{ + unsigned char euc[4]; + char *inp = (char *) UCS_STR; + char *outp = euc; + size_t inbytesleft = strlen (UCS_STR); + size_t outbytesleft = out_size; + size_t ret; + bool fail = false; + + errno = 0; + ret = iconv (cd, &inp, &inbytesleft, &outp, &outbytesleft); + if (errno || ret == (size_t) -1) + { + fail = out_size == 4 || errno != E2BIG; + printf ("expected %d (E2BIG), got %d (%m)\n", E2BIG, errno); + } + else + { + printf ("%s: 0x%02x%02x\n", to_code, euc[0], euc[1]); + if (out_size == 1) + fail = true; + } + + return fail; +} + + +static iconv_t +xiconv_open (const char *code) +{ + iconv_t cd; + to_code = code; + errno = 0; + if (errno || (cd = iconv_open (to_code, "UCS-2BE")) == (iconv_t) -1) + { + puts ("Can't open converter"); + exit (1); + } + return cd; +} + + +int +main (void) +{ + iconv_t cd; + int result = 0; + + cd = xiconv_open ("EUC-TW"); + result |= xiconv (cd, 4) == true; + puts ("---"); + result |= xiconv (cd, 1) == true; + puts ("---"); + iconv_close (cd); + + cd = xiconv_open ("EUC-JP"); + result |= xiconv (cd, 4) == true; + puts ("---"); + result |= xiconv (cd, 1) == true; + puts ("---"); + iconv_close (cd); + + return result; +} -- cgit v1.2.3