From: Juan Basso Date: Fri, 6 Feb 2015 04:45:04 +0000 (-0500) Subject: Fixed serialization of non string values on __sleep X-Git-Tag: php-5.6.8RC1~39 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4076a4d2a9b004c5898ea60b549f824631e0983d;p=php Fixed serialization of non string values on __sleep Returning just N; (null) on the __sleep makes the number of fields/values be incomplete and corrupting the generated value from serialize, making impossible to unserialize it. Conflicts: ext/standard/var.c --- diff --git a/ext/standard/tests/serialize/serialization_objects_016.phpt b/ext/standard/tests/serialize/serialization_objects_016.phpt new file mode 100644 index 0000000000..e9b6bf21da --- /dev/null +++ b/ext/standard/tests/serialize/serialization_objects_016.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 9dd70f5c11..557d71cb37 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -658,10 +658,7 @@ static void php_var_serialize_class(smart_str *buf, zval *struc, zval *retval_pt if (Z_TYPE_PP(name) != IS_STRING) { php_error_docref(NULL TSRMLS_CC, 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 (zend_hash_find(propers, Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, (void *) &d) == SUCCESS) {