aboutsummaryrefslogtreecommitdiff
path: root/iconv/tst-iconv4.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2009-02-03 01:31:30 +0000
committerUlrich Drepper <drepper@redhat.com>2009-02-03 01:31:30 +0000
commit1b14353ee3b4e840e3722fd3dbf1a371fc73f0ca (patch)
treeb9e47fbe4335af7bdfd85587abbbbaefe58ef97a /iconv/tst-iconv4.c
parentebc22416e4ab003dbe67c53590cfeaefd2b37da6 (diff)
downloadglibc-1b14353ee3b4e840e3722fd3dbf1a371fc73f0ca.tar
glibc-1b14353ee3b4e840e3722fd3dbf1a371fc73f0ca.tar.gz
glibc-1b14353ee3b4e840e3722fd3dbf1a371fc73f0ca.tar.bz2
glibc-1b14353ee3b4e840e3722fd3dbf1a371fc73f0ca.zip
[BZ #9793]
2009-02-02 Ulrich Drepper <drepper@redhat.com> [BZ #9793] * iconv/gconv_trans.c (__gconv_transliterate): Don't change *OUTBUFSTART unless the whole output fit into the buffer. * iconv/Makefile (tests): Add tst-iconv4. * iconv/tst-iconv4.c: New file.
Diffstat (limited to 'iconv/tst-iconv4.c')
-rw-r--r--iconv/tst-iconv4.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/iconv/tst-iconv4.c b/iconv/tst-iconv4.c
new file mode 100644
index 0000000000..b5ff39306c
--- /dev/null
+++ b/iconv/tst-iconv4.c
@@ -0,0 +1,65 @@
+// Derived from BZ #9793
+#include <errno.h>
+#include <iconv.h>
+#include <stdio.h>
+
+
+static int
+do_test (void)
+{
+ iconv_t cd = iconv_open ("ASCII//TRANSLIT", "UTF-8");
+ if (cd == (iconv_t) -1)
+ {
+ puts ("iconv_open failed");
+ return 1;
+ }
+
+ char input[2] = { 0xc2, 0xae }; /* Registered trademark */
+ char *inptr = input;
+ size_t insize = sizeof (input);
+ char output[2]; /* Too short to contain "(R)". */
+ char *outptr = output;
+ size_t outsize = sizeof (output);
+
+ size_t ret = iconv (cd, &inptr, &insize, &outptr, &outsize);
+ if (ret != (size_t) -1)
+ {
+ puts ("iconv succeeded");
+ return 1;
+ }
+ if (errno != E2BIG)
+ {
+ puts ("iconv did not set errno to E2BIG");
+ return 1;
+ }
+ int res = 0;
+ if (inptr != input)
+ {
+ puts ("inptr changed");
+ res = 1;
+ }
+ if (insize != sizeof (input))
+ {
+ puts ("insize changed");
+ res = 1;
+ }
+ if (outptr != output)
+ {
+ puts ("outptr changed");
+ res = 1;
+ }
+ if (outsize != sizeof (output))
+ {
+ puts ("outsize changed");
+ res = 1;
+ }
+ if (iconv_close (cd) == -1)
+ {
+ puts ("iconv_close failed");
+ res = 1;
+ }
+ return res;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"