]> granicus.if.org Git - php/commitdiff
- Allow negative infinity
authorMarcus Boerger <helly@php.net>
Tue, 23 Mar 2004 22:30:25 +0000 (22:30 +0000)
committerMarcus Boerger <helly@php.net>
Tue, 23 Mar 2004 22:30:25 +0000 (22:30 +0000)
- Register missing constants, they work anyway but cause an E_NOTICE
# generation by atof() should be portable enough (afaik)

ext/standard/basic_functions.c
ext/standard/tests/math/bug27646.phpt [new file with mode: 0755]
ext/standard/var_unserializer.re

index 46ec37f640842bf6722a9ad286c90bc5d080c779..c7cccee50654d77643180777904fa6f19dcc865a 100644 (file)
@@ -982,6 +982,8 @@ PHP_MINIT_FUNCTION(basic)
        REGISTER_MATH_CONSTANT(M_2_SQRTPI);
        REGISTER_MATH_CONSTANT(M_SQRT2);
        REGISTER_MATH_CONSTANT(M_SQRT1_2);
+       REGISTER_DOUBLE_CONSTANT("INF", atof("INF"), CONST_CS | CONST_PERSISTENT);
+       REGISTER_DOUBLE_CONSTANT("NAN", atof("NAN"), CONST_CS | CONST_PERSISTENT);
 
 #if ENABLE_TEST_CLASS
        test_class_startup();
diff --git a/ext/standard/tests/math/bug27646.phpt b/ext/standard/tests/math/bug27646.phpt
new file mode 100755 (executable)
index 0000000..8c05bb9
--- /dev/null
@@ -0,0 +1,31 @@
+--TEST--
+Bug #27646 (Cannot serialize/unserialize non-finite numeric values)
+--FILE--
+<?php
+
+$f=-(float)INF;
+var_dump($f);
+var_dump(serialize($f));
+var_dump(unserialize(serialize($f)));
+
+$f=(float)INF;
+var_dump($f);
+var_dump(serialize($f));
+var_dump(unserialize(serialize($f)));
+
+$f=(float)NAN;
+var_dump($f);
+var_dump(serialize($f));
+var_dump(unserialize(serialize($f)));
+
+?>
+--EXPECT--
+float(-INF)
+string(7) "d:-INF;"
+float(-INF)
+float(INF)
+string(6) "d:INF;"
+float(INF)
+float(NAN)
+string(6) "d:NAN;"
+float(NAN)
index 8f53eca0b6698fe172cfb4c88823e2d006579c58..9895a3b8930ded4e5ffb98bf5daa6d664b9a7d00 100644 (file)
@@ -320,7 +320,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
        return 1;
 }
 
-"d:" (iv | nv | nvexp | "NAN" | "INF") ";"     {
+"d:" (iv | nv | nvexp | "NAN" | "-"? "INF") ";"        {
        *p = YYCURSOR;
        INIT_PZVAL(*rval);
        ZVAL_DOUBLE(*rval, atof(start + 2));