diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-03-11 15:36:40 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-03-11 15:36:40 +0100 |
commit | cc354a079073061336d8824eebba85042a0de104 (patch) | |
tree | 4eaa107295aefb037ad244970fb721a6c7f15477 | |
parent | ac79d42ba6ed05c5dcb611b66cdad07f3bcbba58 (diff) | |
parent | 6818ca3c022d70bd48ac86df8798aa537245935c (diff) | |
download | php-git-cc354a079073061336d8824eebba85042a0de104.tar.gz |
Merge branch 'PHP-7.3' into PHP-7.4
-rw-r--r-- | ext/standard/tests/general_functions/bug76717.phpt | 14 | ||||
-rw-r--r-- | ext/standard/var.c | 7 |
2 files changed, 21 insertions, 0 deletions
diff --git a/ext/standard/tests/general_functions/bug76717.phpt b/ext/standard/tests/general_functions/bug76717.phpt new file mode 100644 index 0000000000..b4bbd04a51 --- /dev/null +++ b/ext/standard/tests/general_functions/bug76717.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #76717: var_export() does not create a parsable value for PHP_INT_MIN +--FILE-- +<?php + +$min = eval('return '.var_export(PHP_INT_MIN, true).';'); +$max = eval('return '.var_export(PHP_INT_MAX, true).';'); +var_dump($min === PHP_INT_MIN); +var_dump($max === PHP_INT_MAX); + +?> +--EXPECT-- +bool(true) +bool(true) diff --git a/ext/standard/var.c b/ext/standard/var.c index 06f45c0c73..66150c7274 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -487,6 +487,13 @@ again: smart_str_appendl(buf, "NULL", 4); break; case IS_LONG: + /* INT_MIN as a literal will be parsed as a float. Emit something like + * -9223372036854775807-1 to avoid this. */ + if (Z_LVAL_P(struc) == ZEND_LONG_MIN) { + smart_str_append_long(buf, ZEND_LONG_MIN+1); + smart_str_appends(buf, "-1"); + break; + } smart_str_append_long(buf, Z_LVAL_P(struc)); break; case IS_DOUBLE: |