From c7c3b0e907efac218b329ebbe3fc7432ec4415c5 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 29 Aug 2000 21:14:05 +0000 Subject: Update. 2000-08-29 Akira Higuchi * iconv/gconv_db.c (increment_counter): Reset __init_fct, __fct, and __end_fct fields of struct __gconv_step. * iconv/Makefile (tests): Add iconv-bug2. * iconv/iconv-bug2.c: New file. * iconvdata/euc-kr.c (BODY for FROM_LOOP): Pass 'inend - inptr' instead of 'inptr - inend' to ksc5601_to_ucs4. * iconvdata/sjis.c (BODY for FROM_LOOP): Allow 0x7f character. * iconvdata/iso-2022-cn.c (BODY for FROM_LOOP): If an incomplete character or shift sequence is found at the end of the input string, return__GCONV_INCOMPLETE_INPUT instead of __GCONV_EMPTY_INPUT. * iconvdata/iso-2022-jp.c (BODY for FROM_LOOP): Likewise. * iconvdata/iso-2022-kr.c (BODY for FROM_LOOP): Likewise. * iconvdata/iso-2022-jp.c (BODY for FROM_LOOP): Return __GCONV_ILLEGAL_INPUT for 8bit characters. --- iconvdata/bug-iconv2.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 iconvdata/bug-iconv2.c (limited to 'iconvdata/bug-iconv2.c') diff --git a/iconvdata/bug-iconv2.c b/iconvdata/bug-iconv2.c new file mode 100644 index 0000000000..a2bf44f419 --- /dev/null +++ b/iconvdata/bug-iconv2.c @@ -0,0 +1,47 @@ +/* Test case by Akira Higuchi . */ + +#include +#include +#include + +int +main (void) +{ + const char *dummy_codesets[] = + { + "ISO_8859-1", "ISO_8859-2", "ISO_8859-3", "ISO_8859-4", + "ISO_8859-5", "ISO_8859-6", "ISO_8859-7", "ISO_8859-8" + }; + iconv_t dummy_cd[8], cd_a; + int i; + char buffer[1024], *to = buffer; + char *from = (char *) "foobar"; + size_t to_left = 1024, from_left = 6; + + /* load dummy modules */ + for (i = 0; i < 8; i++) + if ((dummy_cd[i] = iconv_open (dummy_codesets[i], "UTF8")) == (iconv_t) -1) + exit (1); + + /* load a module... */ + if ((cd_a = iconv_open ("EUC-JP", "UTF8")) == (iconv_t) -1) + exit (1); + /* and close it once. we'll reload this later */ + iconv_close (cd_a); + + /* unload dummy modules */ + for (i = 0; i < 8; i++) + iconv_close (dummy_cd[i]); + + /* load the module again */ + if ((cd_a = iconv_open ("EUC-JP", "UTF8")) == (iconv_t) -1) + exit (1); + + puts ("This used to crash"); + printf ("%d\n", iconv (cd_a, &from, &from_left, &to, &to_left)); + iconv_close (cd_a); + + puts ("works now"); + + return 0; +} -- cgit 1.4.1