--- /dev/null
+--TEST--
+serialize() integrity with non string on __sleep
+--FILE--
+<?php
+class testString
+{
+ public $a = true;
+
+ public function __sleep()
+ {
+ return array('a', '1');
+ }
+}
+
+class testInteger
+{
+ public $a = true;
+
+ public function __sleep()
+ {
+ return array('a', 1);
+ }
+}
+
+$cs = new testString();
+$ci = new testInteger();
+
+$ss = @serialize($cs);
+echo $ss . "\n";
+
+$si = @serialize($ci);
+echo $si . "\n";
+
+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) {
+ ["a"]=>
+ bool(true)
+ ["1"]=>
+ NULL
+}
+object(testInteger)#3 (2) {
+ ["a"]=>
+ bool(true)
+ ["1"]=>
+ NULL
+}
\ No newline at end of file
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) {