Mercurial > hg > octave-lyh > gnulib-hg
changeset 8837:6d6277df29a9
Fix logic bug introduced on 2007-05-06.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sat, 19 May 2007 00:38:42 +0000 |
parents | 07084ab003b8 |
children | db95bdbeb72c |
files | ChangeLog lib/vasnprintf.c |
diffstat | 2 files changed, 26 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-05-18 Bruno Haible <bruno@clisp.org> + + * lib/vasnprintf.c (VASNPRINTF) [NEED_PRINTF_FLAG_ZERO]: Fix logic bug + introduced on 2007-05-06. + 2007-05-18 Bruno Haible <bruno@clisp.org> * tests/test-vasnprintf-posix.c (test_function): Also test the %e and
--- a/lib/vasnprintf.c +++ b/lib/vasnprintf.c @@ -2841,6 +2841,23 @@ return NULL; } + /* Make room for the result. */ + if (count >= maxlen) + { + /* Need at least count bytes. But allocate + proportionally, to avoid looping eternally if + snprintf() reports a too small count. */ + size_t n = + xmax (xsum (length, count), xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); +#if USE_SNPRINTF + continue; +#else + maxlen = allocated - length; +#endif + } + /* Perform padding. */ #if NEED_PRINTF_FLAG_ZERO if (pad_ourselves && has_width && count < width) @@ -2853,14 +2870,15 @@ proportionally, to avoid looping eternally if snprintf() reports a too small count. */ size_t n = - xmax (xsum (length, width), + xmax (xsum (length + 1, width), xtimes (allocated, 2)); length += count; ENSURE_ALLOCATION (n); length -= count; - maxlen = allocated - length; /* >= width */ + maxlen = allocated - length; /* > width */ } + /* Here width < maxlen. */ # endif { # if USE_SNPRINTF @@ -2919,20 +2937,7 @@ abort (); #endif - /* Make room for the result. */ - if (count >= maxlen) - { - /* Need at least count bytes. But allocate - proportionally, to avoid looping eternally if - snprintf() reports a too small count. */ - size_t n = - xmax (xsum (length, count), xtimes (allocated, 2)); - - ENSURE_ALLOCATION (n); -#if USE_SNPRINTF - continue; -#endif - } + /* Here still count < maxlen. */ #if USE_SNPRINTF /* The snprintf() result did fit. */