diff options
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | ext/bcmath/libbcmath/src/str2num.c | 3 | ||||
-rw-r--r-- | ext/bcmath/tests/bug46781.phpt | 16 |
3 files changed, 20 insertions, 0 deletions
@@ -7,6 +7,7 @@ PHP NEWS - BCMath: . Fixed bug #44995 (bcpowmod() fails if scale != 0). (cmb) + . Fixed bug #46781 (BC math handles minus zero incorrectly). (cmb) . Fixed bug #54598 (bcpowmod() may return 1 if modulus is 1). (okano1220, cmb) . Fixed bug #75178 (bcpowmod() misbehaves for non-integer base or modulus). (cmb) diff --git a/ext/bcmath/libbcmath/src/str2num.c b/ext/bcmath/libbcmath/src/str2num.c index ef505e86e1..62544de80e 100644 --- a/ext/bcmath/libbcmath/src/str2num.c +++ b/ext/bcmath/libbcmath/src/str2num.c @@ -105,5 +105,8 @@ bc_str2num (bc_num *num, char *str, int scale) for (;strscale > 0; strscale--) *nptr++ = CH_VAL(*ptr++); } + + if (bc_is_zero (*num)) + (*num)->n_sign = PLUS; } diff --git a/ext/bcmath/tests/bug46781.phpt b/ext/bcmath/tests/bug46781.phpt new file mode 100644 index 0000000000..caffe83860 --- /dev/null +++ b/ext/bcmath/tests/bug46781.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #46781 (BC math handles minus zero incorrectly) +--SKIPIF-- +<?php +if (!extension_loaded('bcmath')) die('skip bcmath extension is not available'); +?> +--FILE-- +<?php +var_dump(bcadd('-0.0', '-0.0', 1)); +var_dump(bccomp('-0.0', '0', 1)); +?> +===DONE=== +--EXPECT-- +string(3) "0.0" +int(0) +===DONE=== |