Fix test fails: ext/standard/tests/general_functions/bug27678.phpt
authorReeze Xia <reeze.xia@gmail.com>
Tue, 17 Jul 2012 15:01:20 +0000 (23:01 +0800)
committerGustavo André dos Santos Lopes <cataphract@php.net>
Tue, 17 Jul 2012 21:08:11 +0000 (23:08 +0200)
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.

ext/standard/math.c
ext/standard/tests/general_functions/bug27678.phpt

index b3e8c6f086c0ef81ef3a84c17749a0c65afa6e40..6e934a3857a7c04b0531277451f8a259958c47f6 100644 (file)
@@ -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;
        }
 
index 5db5890a1ce5b1a4161a445c548d61e36f3f2485..6f95509e14efe1e1b7e378ae5880beaab0d6d7b3 100644 (file)
@@ -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