diff options
-rw-r--r-- | ext/standard/tests/serialize/bug23298.phpt | 11 | ||||
-rw-r--r-- | ext/standard/var.c | 2 |
2 files changed, 12 insertions, 1 deletions
diff --git a/ext/standard/tests/serialize/bug23298.phpt b/ext/standard/tests/serialize/bug23298.phpt new file mode 100644 index 0000000000..5d1931bd74 --- /dev/null +++ b/ext/standard/tests/serialize/bug23298.phpt @@ -0,0 +1,11 @@ +--TEST-- +Bug #23298 (serialize() and floats/doubles) +--FILE-- +<?php + ini_set('precision', 12); + $foo = 1.428571428571428647642857142; + $bar = unserialize(serialize($foo)); + var_dump(($foo === $bar)); +?> +--EXPECT-- +bool(true) diff --git a/ext/standard/var.c b/ext/standard/var.c index 9dbc15241d..89db9e7c0f 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -535,7 +535,7 @@ static void php_var_serialize_intern(smart_str *buf, zval **struc, HashTable *va char s[256]; ulong slen; - slen = sprintf(s, "d:%.*G;", (int) EG(precision), Z_DVAL_PP(struc)); + slen = sprintf(s, "d:%.252g;", Z_DVAL_PP(struc)); smart_str_appendl(buf, s, slen); return; } |