--- /dev/null
+--TEST--
+Overwriting an undeclared property with protected mangling
+--FILE--
+<?php
+class Test {
+ // We need at least one declared property, even though we don't use it.
+ public $foo;
+}
+
+$str = <<<STR
+O:4:"Test":2:{s:4:"\0*\0x";N;s:4:"\0*\0x";N;}
+STR;
+var_dump(unserialize($str));
+?>
+--EXPECT--
+object(Test)#1 (2) {
+ ["foo"]=>
+ NULL
+ ["x":protected]=>
+ NULL
+}
} else {
if (!strcmp(unmangled_class, "*")
|| !strcasecmp(unmangled_class, ZSTR_VAL(ce->name))) {
- zend_string *unmangled = zend_string_init(unmangled_prop, unmangled_prop_len, 0);
-
- existing_propinfo = zend_hash_find_ptr(&ce->properties_info, unmangled);
+ existing_propinfo = zend_hash_str_find_ptr(
+ &ce->properties_info, unmangled_prop, unmangled_prop_len);
if (existing_propinfo != NULL) {
- zend_string_release_ex(unmangled, 0);
zval_ptr_dtor_str(key);
ZVAL_STR_COPY(key, existing_propinfo->name);
return 1;
- } else {
- zval_ptr_dtor_str(key);
- ZVAL_STR(key, unmangled);
- return 0;
}
}
}