- Register missing constants, they work anyway but cause an E_NOTICE
# generation by atof() should be portable enough (afaik)
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();
--- /dev/null
+--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)
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));