diff options
author | Xinchen Hui <laruence@gmail.com> | 2015-11-23 07:08:47 -0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2015-11-23 07:08:47 -0800 |
commit | f8bf1f33a53d1aaaa1109cb986544635aaa63f66 (patch) | |
tree | e3ebe4012b71da6af9be37efab5011013e9d3f22 /Zend/zend_API.c | |
parent | 801e46d8c0a869d60e0af9aa0909d6df2cfc7958 (diff) | |
download | php-git-f8bf1f33a53d1aaaa1109cb986544635aaa63f66.tar.gz |
Fixed bug #70959 (ArrayObject unserialize does not restore protected fields)
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r-- | Zend/zend_API.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 5a488f7e9d..0e6d89fc8a 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -1219,8 +1219,20 @@ ZEND_API void object_properties_load(zend_object *object, HashTable *properties) zend_property_info *property_info; ZEND_HASH_FOREACH_KEY_VAL(properties, h, key, prop) { - if(key) { - property_info = zend_get_property_info(object->ce, key, 1); + if (key) { + if (ZSTR_VAL(key)[0] == '\0') { + const char *class_name, *prop_name; + size_t prop_name_len; + if (zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_name_len) == SUCCESS) { + zend_string *pname = zend_string_init(prop_name, prop_name_len, 0); + property_info = zend_get_property_info(object->ce, pname, 1); + zend_string_release(pname); + } else { + property_info = ZEND_WRONG_PROPERTY_INFO; + } + } else { + property_info = zend_get_property_info(object->ce, key, 1); + } if (property_info != ZEND_WRONG_PROPERTY_INFO && property_info && (property_info->flags & ZEND_ACC_STATIC) == 0) { |