mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
[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.
This commit is contained in:
parent
ebc22416e4
commit
1b14353ee3
@ -1,3 +1,11 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
2009-02-01 Ulrich Drepper <drepper@redhat.com>
|
2009-02-01 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* sysdeps/x86_64/cacheinfo.c (intel_02_known): Add new descriptors.
|
* sysdeps/x86_64/cacheinfo.c (intel_02_known): Add new descriptors.
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# Copyright (C) 1997,1998,2000,2001,2002,2003,2004,2007
|
# Copyright (C) 1997,1998,2000-2004,2007,2009 Free Software Foundation, Inc.
|
||||||
# Free Software Foundation, Inc.
|
|
||||||
# This file is part of the GNU C Library.
|
# This file is part of the GNU C Library.
|
||||||
|
|
||||||
# The GNU C Library is free software; you can redistribute it and/or
|
# The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -50,7 +49,7 @@ CFLAGS-charmap.c = -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \
|
|||||||
CFLAGS-linereader.c = -DNO_TRANSLITERATION
|
CFLAGS-linereader.c = -DNO_TRANSLITERATION
|
||||||
CFLAGS-simple-hash.c = -I../locale
|
CFLAGS-simple-hash.c = -I../locale
|
||||||
|
|
||||||
tests = tst-iconv1 tst-iconv2 tst-iconv3 tst-iconv5
|
tests = tst-iconv1 tst-iconv2 tst-iconv3 tst-iconv4 tst-iconv5
|
||||||
|
|
||||||
distribute = gconv_builtin.h gconv_int.h loop.c skeleton.c iconv_prog.h \
|
distribute = gconv_builtin.h gconv_int.h loop.c skeleton.c iconv_prog.h \
|
||||||
iconv_charmap.c dummy-repertoire.c gconv_charset.h strtab.c \
|
iconv_charmap.c dummy-repertoire.c gconv_charset.h strtab.c \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Transliteration using the locale's data.
|
/* Transliteration using the locale's data.
|
||||||
Copyright (C) 2000 Free Software Foundation, Inc.
|
Copyright (C) 2000, 2009 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
||||||
|
|
||||||
@ -139,7 +139,10 @@ __gconv_transliterate (struct __gconv_step *step,
|
|||||||
++*irreversible;
|
++*irreversible;
|
||||||
res = __GCONV_OK;
|
res = __GCONV_OK;
|
||||||
}
|
}
|
||||||
*outbufstart = outptr;
|
/* Do not increment the output pointer if we could not
|
||||||
|
store the entire output. */
|
||||||
|
if (res != __GCONV_FULL_OUTPUT)
|
||||||
|
*outbufstart = outptr;
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
65
iconv/tst-iconv4.c
Normal file
65
iconv/tst-iconv4.c
Normal file
@ -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"
|
Loading…
Reference in New Issue
Block a user