]> granicus.if.org Git - php/commitdiff
Add decimal point in double serialization
authorJakub Zelenka <bukka@php.net>
Sun, 26 Jun 2016 11:29:57 +0000 (12:29 +0100)
committerJakub Zelenka <bukka@php.net>
Sun, 26 Jun 2016 12:26:43 +0000 (13:26 +0100)
ext/standard/var.c
tests/basic/precision.phpt

index 7b0b5daa2b091dd105655d1f0351805a4a33eefd..e0938fe6e9b4eae96c7ec751d7b375fb710c8bc4 100644 (file)
@@ -468,22 +468,17 @@ again:
                        smart_str_append_long(buf, Z_LVAL_P(struc));
                        break;
                case IS_DOUBLE:
-                       /* TODO: check INF, -INF and NAN in the new logic
-                       tmp_len = spprintf(&tmp_str, 0,"%.*H", PG(serialize_precision), Z_DVAL_P(struc));
-                       smart_str_appendl(buf, tmp_str, tmp_len);
-                        * Without a decimal point, PHP treats a number literal as an int.
+                       php_gcvt(Z_DVAL_P(struc), (int)PG(serialize_precision), '.', 'E', tmp_str);
+                       smart_str_appends(buf, tmp_str);
+                       /* Without a decimal point, PHP treats a number literal as an int.
                         * This check even works for scientific notation, because the
                         * mantissa always contains a decimal point.
                         * We need to check for finiteness, because INF, -INF and NAN
                         * must not have a decimal point added.
-                        *
+                        */
                        if (zend_finite(Z_DVAL_P(struc)) && NULL == strchr(tmp_str, '.')) {
                                smart_str_appendl(buf, ".0", 2);
                        }
-                       efree(tmp_str);
-                       */
-                       php_gcvt(Z_DVAL_P(struc), (int)PG(serialize_precision), '.', 'E', tmp_str);
-                       smart_str_appends(buf, tmp_str);
                        break;
                case IS_STRING:
                        ztmp = php_addcslashes(Z_STR_P(struc), 0, "'\\", 2);
index 9c50fa7608f37878d4b8e52bcb03c3d1844e22b2..173b94701ea33e1b8e61829ee63bf40ea33b7be5 100644 (file)
@@ -109,7 +109,7 @@ OUTPUTS
 123456789 3.33333333 9.87E+102 10.0000001
 string(72) "a:4:{i:0;d:123456789;i:1;d:3.33333333;i:2;d:9.87E+102;i:3;d:10.0000001;}"
 array (
-  0 => 123456789,
+  0 => 123456789.0,
   1 => 3.33333333,
   2 => 9.87E+102,
   3 => 10.0000001,