summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/tests/serialize/bug23298.phpt11
-rw-r--r--ext/standard/var.c2
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;
}