diff options
author | Siddhesh Poyarekar <siddhesh@redhat.com> | 2012-06-06 18:39:10 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2012-06-06 18:41:55 +0530 |
commit | 6e230d11837f3ae7b375ea69d7905f0d18eb79e5 (patch) | |
tree | 9f28c8ad04d625474d52cee21e7ab965efee251a /iconvdata/ibm930.c | |
parent | 1b671feb6115afbc90a7b37be4929d3e0394f311 (diff) | |
download | glibc-6e230d11837f3ae7b375ea69d7905f0d18eb79e5.tar glibc-6e230d11837f3ae7b375ea69d7905f0d18eb79e5.tar.gz glibc-6e230d11837f3ae7b375ea69d7905f0d18eb79e5.tar.bz2 glibc-6e230d11837f3ae7b375ea69d7905f0d18eb79e5.zip |
Fix validation check when converting from ibm930 to utf
[BZ #14134]
When converting IBM930 code with iconv(), if IBM930 code which
includes invalid multibyte character "0xffff" is specified, then
iconv() segfaults. This is easy to see using the following command:
echo '0x0e 0x43 0x8c 0xff 0xff 0x43 0xbd 0x43 0xbd' | xxd -r |
iconv -f IBM930 -t UTF-8
Diffstat (limited to 'iconvdata/ibm930.c')
-rw-r--r-- | iconvdata/ibm930.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/iconvdata/ibm930.c b/iconvdata/ibm930.c index 25a9be02d8..587d54f08b 100644 --- a/iconvdata/ibm930.c +++ b/iconvdata/ibm930.c @@ -1,5 +1,5 @@ /* Conversion from and to IBM930. - Copyright (C) 2000-2002, 2008 Free Software Foundation, Inc. + Copyright (C) 2000-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Masahide Washizawa <washi@yamato.ibm.co.jp>, 2000. @@ -162,7 +162,8 @@ enum while (ch > rp2->end) \ ++rp2; \ \ - if (__builtin_expect (ch < rp2->start, 0) \ + if (__builtin_expect (rp2->start == 0xffff, 0) \ + || __builtin_expect (ch < rp2->start, 0) \ || (res = __ibm930db_to_ucs4[ch + rp2->idx], \ __builtin_expect (res, L'\1') == L'\0' && ch != '\0')) \ { \ |