From 5e0d030065a49247b306a2b445fa7720b8ee09cb Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 3 Jan 2012 10:37:59 -0500 Subject: Fix assertion in gconv's loop.c --- ChangeLog | 3 +++ iconv/loop.c | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 074c7a8e8d..f31cc94f75 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-01-03 Ulrich Drepper + * iconv/loop.c (single loop): Fix assertion in storing of + remaining bytes. + * posix/regcomp.c (init_word_char): Optimize a bit for sane encodings. 2012-01-01 Ulrich Drepper diff --git a/iconv/loop.c b/iconv/loop.c index 4f430628f7..2e88b1deef 100644 --- a/iconv/loop.c +++ b/iconv/loop.c @@ -1,5 +1,5 @@ /* Conversion loop frame work. - Copyright (C) 1998-2003, 2005, 2008, 2011 Free Software Foundation, Inc. + Copyright (C) 1998-2003, 2005, 2008, 2011, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -390,6 +390,7 @@ SINGLE(LOOPFCT) (struct __gconv_step *step, UNPACK_BYTES #else /* Add the bytes from the state to the input buffer. */ + assert ((state->__count & 7) <= sizeof (state->__value)); for (inlen = 0; inlen < (size_t) (state->__count & 7); ++inlen) bytebuf[inlen] = state->__value.__wchb[inlen]; #endif @@ -474,7 +475,7 @@ SINGLE(LOOPFCT) (struct __gconv_step *step, /* We don't have enough input for another complete input character. */ assert (inend - inptr > (state->__count & ~7)); - assert (inend - inptr <= 7); + assert (inend - inptr <= sizeof (state->__value)); state->__count = (state->__count & ~7) | (inend - inptr); inlen = 0; while (inptr < inend) -- cgit 1.4.1