summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Grekas <nicolas.grekas@gmail.com>2020-04-18 12:22:00 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2020-04-22 16:41:04 +0200
commit657f756ccd79b0fd1268eb9796e371aa3f76c2a8 (patch)
tree0673a6c58fa846e951a1f4955e780e974976c350
parentd9a96629fe33d7b058bb8324ed374cd405be5d4a (diff)
downloadphp-git-657f756ccd79b0fd1268eb9796e371aa3f76c2a8.tar.gz
Skip non-existing properties returned by __sleep()
-rw-r--r--UPGRADING3
-rw-r--r--ext/standard/tests/serialize/bug14293.phpt6
-rw-r--r--ext/standard/tests/serialize/bug69210.phpt12
-rw-r--r--ext/standard/tests/serialize/sleep_undefined_declared_properties.phpt2
-rw-r--r--ext/standard/var.c1
-rw-r--r--tests/classes/bug26737.phpt2
6 files changed, 11 insertions, 15 deletions
diff --git a/UPGRADING b/UPGRADING
index 000e586677..568bdf584a 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -391,6 +391,9 @@ PHP 8.0 UPGRADE NOTES
using serialize_precision rather than precision. In a default configuration,
this means that floating-point numbers are now printed with full accuracy
by these debugging functions.
+ . If the array returned by __sleep() contains non-existing properties, these
+ are now silently ignored. Previously, such properties would have been
+ serialized as if they had the value NULL.
- tidy:
. The $use_include_path parameter, which was not used internally, has been
diff --git a/ext/standard/tests/serialize/bug14293.phpt b/ext/standard/tests/serialize/bug14293.phpt
index 875f8b2bc8..ae108ba53a 100644
--- a/ext/standard/tests/serialize/bug14293.phpt
+++ b/ext/standard/tests/serialize/bug14293.phpt
@@ -27,10 +27,8 @@ var_dump($t);
__sleep called
Notice: serialize(): "b" returned as member variable from __sleep() but does not exist in %sbug14293.php on line %d
-O:1:"t":2:{s:1:"a";s:5:"hello";s:1:"b";N;}
-object(t)#%d (2) {
+O:1:"t":1:{s:1:"a";s:5:"hello";}
+object(t)#%d (1) {
["a"]=>
string(5) "hello"
- ["b"]=>
- NULL
}
diff --git a/ext/standard/tests/serialize/bug69210.phpt b/ext/standard/tests/serialize/bug69210.phpt
index 610c88f879..41cc8f55f9 100644
--- a/ext/standard/tests/serialize/bug69210.phpt
+++ b/ext/standard/tests/serialize/bug69210.phpt
@@ -35,17 +35,13 @@ var_dump(unserialize($ss));
var_dump(unserialize($si));
?>
--EXPECT--
-O:10:"testString":2:{s:1:"a";b:1;s:1:"1";N;}
-O:11:"testInteger":2:{s:1:"a";b:1;s:1:"1";N;}
-object(testString)#3 (2) {
+O:10:"testString":1:{s:1:"a";b:1;}
+O:11:"testInteger":1:{s:1:"a";b:1;}
+object(testString)#3 (1) {
["a"]=>
bool(true)
- ["1"]=>
- NULL
}
-object(testInteger)#3 (2) {
+object(testInteger)#3 (1) {
["a"]=>
bool(true)
- ["1"]=>
- NULL
}
diff --git a/ext/standard/tests/serialize/sleep_undefined_declared_properties.phpt b/ext/standard/tests/serialize/sleep_undefined_declared_properties.phpt
index ac33f4388c..05a638cfba 100644
--- a/ext/standard/tests/serialize/sleep_undefined_declared_properties.phpt
+++ b/ext/standard/tests/serialize/sleep_undefined_declared_properties.phpt
@@ -26,4 +26,4 @@ Notice: serialize(): "pub" returned as member variable from __sleep() but does n
Notice: serialize(): "prot" returned as member variable from __sleep() but does not exist in %s on line %d
Notice: serialize(): "priv" returned as member variable from __sleep() but does not exist in %s on line %d
-string(53) "O:4:"Test":3:{s:3:"pub";N;s:4:"prot";N;s:4:"priv";N;}"
+string(15) "O:4:"Test":0:{}"
diff --git a/ext/standard/var.c b/ext/standard/var.c
index e1bc4c5597..9f15fc9e35 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -861,7 +861,6 @@ static int php_var_serialize_get_sleep_props(
php_error_docref(NULL, E_NOTICE,
"\"%s\" returned as member variable from __sleep() but does not exist", ZSTR_VAL(name));
- zend_hash_add(ht, name, &EG(uninitialized_zval));
zend_tmp_string_release(tmp_name);
} ZEND_HASH_FOREACH_END();
diff --git a/tests/classes/bug26737.phpt b/tests/classes/bug26737.phpt
index ac7b67f5c7..f6f33fbf80 100644
--- a/tests/classes/bug26737.phpt
+++ b/tests/classes/bug26737.phpt
@@ -19,4 +19,4 @@ var_dump(str_replace("\0", '\0', $data));
?>
--EXPECTF--
Notice: serialize(): "no_such" returned as member variable from __sleep() but does not exist in %s on line %d
-string(130) "O:3:"foo":4:{s:12:"\0foo\0private";s:7:"private";s:12:"\0*\0protected";s:9:"protected";s:6:"public";s:6:"public";s:7:"no_such";N;}"
+string(114) "O:3:"foo":3:{s:12:"\0foo\0private";s:7:"private";s:12:"\0*\0protected";s:9:"protected";s:6:"public";s:6:"public";}"