com php-src: Ensure number_format() doesn't include sign for zero: UPGRADING ext/standard/math.c e xt/standard/tests/math/number_format_negative_zero.phpt

[email protected] (Joe Watkins)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    e946d074dd6df1f99b844c84e7179eb09f11c602
Author:    Craig Duncan <[email protected]>         Thu, 24 Nov 2016 21:56:53 +0000
Committer: Joe Watkins <[email protected]>      Tue, 9 May 2017 10:17:19 +0100
Parents:   e1c32646b40b6e3a41cbd7a78d03900cfdf1b72a
Branches:  master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=e946d074dd6df1f99b844c84e7179eb09f11c602

Log:
Ensure number_format() doesn't include sign for zero

Changed paths:
  M  UPGRADING
  M  ext/standard/math.c
  A  ext/standard/tests/math/number_format_negative_zero.phpt


Diff:
diff --git a/UPGRADING b/UPGRADING
index 78ce94c..0530958 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -187,6 +187,7 @@ See also: https://wiki.php.net/rfc/deprecations_php_7_2
   . count() now raises a warning when an invalid parameter is passed.
     Only arrays and objects implementing the Countable interface should be passed.
   . pack() and unpack() now support float and double in both little and big endian.
+  . number_format() ensures zero values never contain a negative sign.
 
 - XML:
   . utf8_encode() and utf8_decode() have been moved to the Standard extension
diff --git a/ext/standard/math.c b/ext/standard/math.c
index 169d0a0..794128b 100644
--- a/ext/standard/math.c
+++ b/ext/standard/math.c
@@ -1143,6 +1143,11 @@ PHPAPI zend_string *_php_math_number_format_ex(double d, int dec, char *dec_poin
 		return tmpbuf;
 	}
 
+	/* Check if the number is no longer negative after rounding */
+	if (is_negative && d == 0) {
+		is_negative = 0;
+	}
+
 	/* find decimal point, if expected */
 	if (dec) {
 		dp = strpbrk(ZSTR_VAL(tmpbuf), ".,");
diff --git a/ext/standard/tests/math/number_format_negative_zero.phpt b/ext/standard/tests/math/number_format_negative_zero.phpt
new file mode 100644
index 0000000..743a535
--- /dev/null
+++ b/ext/standard/tests/math/number_format_negative_zero.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Prevent number_format from returning negative zero
+--FILE--
+<?php
+
+$number = -1.15E-15;
+
+var_dump($number);
+var_dump(number_format($number, 2));
+var_dump(number_format(-0.01, 2));
+
+?>
+--EXPECT--
+float(-1.15E-15)
+string(4) "0.00"
+string(5) "-0.01"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.