summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSander Roobol <sander@php.net>2002-08-19 19:45:46 +0000
committerSander Roobol <sander@php.net>2002-08-19 19:45:46 +0000
commit47ae4068bb604220feb12bfee3afa35ce18d2d33 (patch)
tree6ea49140a2177b47a840f2ba4851c52f53f3699b
parentef9014d95debaad7ab444407aa92b12005934723 (diff)
downloadphp-git-47ae4068bb604220feb12bfee3afa35ce18d2d33.tar.gz
Made unserialize handle floats with an E notation - bug #18654
Patch by Christophe Sollet <csollet@coleebris.com>. (I'll commit a new var_unserializer.c in a second)
-rw-r--r--ext/standard/tests/serialize/003.phpt24
-rw-r--r--ext/standard/var_unserializer.re2
2 files changed, 25 insertions, 1 deletions
diff --git a/ext/standard/tests/serialize/003.phpt b/ext/standard/tests/serialize/003.phpt
new file mode 100644
index 0000000000..43e9077382
--- /dev/null
+++ b/ext/standard/tests/serialize/003.phpt
@@ -0,0 +1,24 @@
+--TEST--
+unserialize() floats with E notation (#18654)
+--POST--
+--GET--
+--FILE--
+<?php
+foreach(array(1e2, 5.2e25, 85.29e-23, 9e-9) AS $value) {
+ echo ($ser = serialize($value))."\n";
+ var_dump(unserialize($ser));
+ echo "\n";
+}
+?>
+--EXPECT--
+d:100;
+float(100)
+
+d:5.2E+25;
+float(5.2E+25)
+
+d:8.529E-22;
+float(8.529E-22)
+
+d:9E-09;
+float(9.E-9)
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
index 185909492b..1e6dcd078c 100644
--- a/ext/standard/var_unserializer.re
+++ b/ext/standard/var_unserializer.re
@@ -92,7 +92,7 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hashx)
/*!re2c
iv = [+-]? [0-9]+;
nv = [+-]? ([0-9]* "." [0-9]+|[0-9]+ "." [0-9]+);
-nvexp = nv [eE] [+-]? iv;
+nvexp = (iv | nv) [eE] [+-]? iv;
any = [\000-\277];
*/