about summary refs log tree commit diff
path: root/iconvdata/bug-iconv2.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-08-29 21:14:05 +0000
committerUlrich Drepper <drepper@redhat.com>2000-08-29 21:14:05 +0000
commitc7c3b0e907efac218b329ebbe3fc7432ec4415c5 (patch)
tree9d7b90e399e6ee1e87e49dec92ec47f4476352f3 /iconvdata/bug-iconv2.c
parent4dadd40cc72ddee017ebd0d278671398485dcbb6 (diff)
downloadglibc-c7c3b0e907efac218b329ebbe3fc7432ec4415c5.tar.gz
glibc-c7c3b0e907efac218b329ebbe3fc7432ec4415c5.tar.xz
glibc-c7c3b0e907efac218b329ebbe3fc7432ec4415c5.zip
Update.
2000-08-29  Akira Higuchi  <a@kondara.org>

	* 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.
Diffstat (limited to 'iconvdata/bug-iconv2.c')
-rw-r--r--iconvdata/bug-iconv2.c47
1 files changed, 47 insertions, 0 deletions
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 <a@kondara.org>.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <iconv.h>
+
+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;
+}