From 88a97c6e4cedbd71e05008dab220922894ef66da Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 14 May 2011 00:53:21 -0400 Subject: Fix handling of incomplete character storage in state If iconv is called more than once in a row for adding bytes to the sequence while still remain under the minimum size of a character and if STORE_REST is defined, we didn't consume any input. Fix that. (cherry picked from commit 1af4e29837e9969377781b47254b6e4c293353ed) --- ChangeLog | 5 +++++ iconv/loop.c | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 221f8a9118..3f05f09114 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2011-05-14 Ulrich Drepper + + * iconv/loop.c (SINGLE) [STORE_REST]: Add input bytes to bytebuf before + storing incomplete byte sequence in state object. + 2011-05-13 Ulrich Drepper [BZ #12724] diff --git a/iconv/loop.c b/iconv/loop.c index da11bc209d..72fef94222 100644 --- a/iconv/loop.c +++ b/iconv/loop.c @@ -1,5 +1,5 @@ /* Conversion loop frame work. - Copyright (C) 1998-2002, 2003, 2005, 2008 Free Software Foundation, Inc. + Copyright (C) 1998-2003, 2005, 2008, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -399,6 +399,9 @@ SINGLE(LOOPFCT) (struct __gconv_step *step, { *inptrp = inend; #ifdef STORE_REST + while (inptr < inend) + bytebuf[inlen++] = *inptr++; + inptr = bytebuf; inptrp = &inptr; inend = &bytebuf[inlen]; -- cgit v1.2.1