diff --git a/ext/standard/tests/serialize/bug69210.phpt b/ext/standard/tests/serialize/bug69210.phpt new file mode 100644 index 0000000000000..e9b6bf21da098 --- /dev/null +++ b/ext/standard/tests/serialize/bug69210.phpt @@ -0,0 +1,51 @@ +--TEST-- +serialize() integrity with non string on __sleep +--FILE-- + +--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) { + ["a"]=> + bool(true) + ["1"]=> + NULL +} +object(testInteger)#3 (2) { + ["a"]=> + bool(true) + ["1"]=> + NULL +} \ No newline at end of file diff --git a/ext/standard/var.c b/ext/standard/var.c index 1c5a000c2503b..ba8bf5db431f9 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -705,10 +705,7 @@ static void php_var_serialize_class(smart_str *buf, zval *struc, zval *retval_pt if (Z_TYPE_P(name) != IS_STRING) { php_error_docref(NULL, E_NOTICE, "__sleep should return an array only containing the names of instance-variables to serialize."); - /* we should still add element even if it's not OK, - * since we already wrote the length of the array before */ - smart_str_appendl(buf,"N;", 2); - continue; + convert_to_string(name); } propers = Z_OBJPROP_P(struc); if ((d = zend_hash_find(propers, Z_STR_P(name))) != NULL) {