summaryrefslogtreecommitdiff
path: root/Zend/zend_API.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2015-11-23 23:16:11 +0800
committerXinchen Hui <laruence@gmail.com>2015-11-23 23:16:11 +0800
commit34bff5b91c77f55dc9963ffd48ad239f5fcca166 (patch)
tree5c41b11797be56a5c5c08f9951a3c52c8aa6c040 /Zend/zend_API.c
parent26f3710ae81c4dc9fb9a2e4965d17b1a985b8c8f (diff)
parent7e9f416218165f7329358e0432c6373d664c5ed7 (diff)
downloadphp-git-34bff5b91c77f55dc9963ffd48ad239f5fcca166.tar.gz
Merge branch 'PHP-7.0'
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r--Zend/zend_API.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 384599b90e..c3d796f61d 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -1221,8 +1221,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) {