Commit: b47d6b32ba8d6dc1b9d1fc91a83eef29a28363c5 Author: Reeze Xia <reeze....@gmail.com> Tue, 17 Jul 2012 23:01:20 +0800 Committer: Gustavo André dos Santos Lopes <cataphr...@php.net> Tue, 17 Jul 2012 23:08:11 +0200 Parents: d0e58bf6eb54676a711d98d3b72a13e828e2deef Branches: PHP-5.4 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=b47d6b32ba8d6dc1b9d1fc91a83eef29a28363c5 Log: Fix test fails: ext/standard/tests/general_functions/bug27678.phpt After commit 3e62aae1, number_format() returns string with length, but _php_math_number_format_ex_len() didn't set string length on nan and inf. This cause segfault when destruct the return value. Bugs: https://bugs.php.net/27678 Changed paths: M ext/standard/math.c M ext/standard/tests/general_functions/bug27678.phpt Diff: diff --git a/ext/standard/math.c b/ext/standard/math.c index b3e8c6f..6e934a3 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -1120,6 +1120,10 @@ static char *_php_math_number_format_ex_len(double d, int dec, char *dec_point, tmplen = spprintf(&tmpbuf, 0, "%.*F", dec, d); if (tmpbuf == NULL || !isdigit((int)tmpbuf[0])) { + if (result_len) { + *result_len = tmplen; + } + return tmpbuf; } diff --git a/ext/standard/tests/general_functions/bug27678.phpt b/ext/standard/tests/general_functions/bug27678.phpt index 5db5890..6f95509 100644 --- a/ext/standard/tests/general_functions/bug27678.phpt +++ b/ext/standard/tests/general_functions/bug27678.phpt @@ -6,9 +6,11 @@ Bug #27678 (number_format() crashes with large numbers) number_format(1e80, 0, '', ' '); number_format(1e300, 0, '', ' '); number_format(1e320, 0, '', ' '); -number_format(1e1000, 0, '', ' '); +$num = number_format(1e1000, 0, '', ' '); +var_dump(strlen($num) == 3); // $num == 'inf' echo "Done\n"; ?> --EXPECT-- +bool(true) Done -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php