moriyoshi Sat Feb 15 10:59:13 2003 EDT Added files: (Branch: PHP_4_3) /php4/ext/standard/tests/strings bug22227.phpt
Modified files: /php4/ext/standard formatted_print.c Log: MFH(r1.65): Fixed bug #22227 MFH: Added test case for bug #22227 Index: php4/ext/standard/formatted_print.c diff -u php4/ext/standard/formatted_print.c:1.59.2.2 php4/ext/standard/formatted_print.c:1.59.2.3 --- php4/ext/standard/formatted_print.c:1.59.2.2 Thu Feb 13 12:26:02 2003 +++ php4/ext/standard/formatted_print.c Sat Feb 15 10:59:13 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: formatted_print.c,v 1.59.2.2 2003/02/13 17:26:02 iliaa Exp $ */ +/* $Id: formatted_print.c,v 1.59.2.3 2003/02/15 15:59:13 moriyoshi Exp $ */ #include <math.h> /* modf() */ #include "php.h" @@ -158,12 +158,11 @@ int alignment, int len, int sign, int expprec) { register int npad; + int req_size; + int copy_len; - if (max_width && min_width) { - expprec = max_width = 0; - } - - npad = min_width - MIN(len, (expprec ? max_width : len)); + copy_len = (expprec ? MIN(max_width, len) : len); + npad = min_width - copy_len; if (npad < 0) { npad = 0; @@ -171,11 +170,11 @@ PRINTF_DEBUG(("sprintf: appendstring(%x, %d, %d, \"%s\", %d, '%c', %d)\n", *buffer, *pos, *size, add, min_width, padding, alignment)); - if ((max_width == 0) && (! expprec)) { - max_width = MAX(min_width, len); - } - if ((*pos + max_width) >= *size) { - while ((*pos + max_width) >= *size) { + + req_size = *pos + MAX(min_width, copy_len) + 1; + + if (req_size > *size) { + while (req_size > *size) { *size <<= 1; } PRINTF_DEBUG(("sprintf ereallocing buffer to %d bytes\n", *size)); @@ -192,8 +191,8 @@ } } PRINTF_DEBUG(("sprintf: appending \"%s\"\n", add)); - memcpy(&(*buffer)[*pos], add, MIN(max_width, len)+1); - *pos += MIN(max_width, len); + memcpy(&(*buffer)[*pos], add, copy_len + 1); + *pos += copy_len; if (alignment == ALIGN_LEFT) { while (npad--) { (*buffer)[(*pos)++] = padding; Index: php4/ext/standard/tests/strings/bug22227.phpt +++ php4/ext/standard/tests/strings/bug22227.phpt --TEST-- Bug #22227 (printf() field limiters broke between 4.2.3 and 4.3.0) --FILE-- <?php printf("%-3.3s", "abcdef"); print "\n"; ?> --EXPECT-- abc -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php