diff options
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) {  | 
