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

Reply via email to