summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-02-24 14:00:52 +0400
committerDmitry Stogov <dmitry@zend.com>2014-02-24 14:00:52 +0400
commit454e9911ad664c1fb51e663c001137ef1dcd4762 (patch)
tree266a2573e148d64e097d902bb5383b129b63c930
parent1770ace2497aefa73b972aa9876cbc9a551bbb45 (diff)
downloadphp-git-454e9911ad664c1fb51e663c001137ef1dcd4762.tar.gz
Fixed new dynamic propery creation
-rw-r--r--Zend/zend_object_handlers.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index 11b16e1472..eb7d86ff6e 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -736,7 +736,7 @@ static zval *zend_std_get_property_ptr_ptr(zval *object, zval *member, int type,
{
zend_object *zobj;
zval tmp_member;
- zval *retval;
+ zval *retval, tmp;
zend_property_info *property_info;
long *guard;
@@ -766,7 +766,7 @@ static zval *zend_std_get_property_ptr_ptr(zval *object, zval *member, int type,
}
goto exit;
}
- if (UNEXPECTED(!zobj->properties)) {
+ if (UNEXPECTED(zobj->properties != NULL)) {
retval = zend_hash_find(zobj->properties, property_info->name);
if (retval) goto exit;
}
@@ -780,12 +780,10 @@ static zval *zend_std_get_property_ptr_ptr(zval *object, zval *member, int type,
if(UNEXPECTED(type == BP_VAR_RW || type == BP_VAR_R)) {
zend_error(E_NOTICE, "Undefined property: %s::$%s", zobj->ce->name->val, Z_STRVAL_P(member));
}
+ ZVAL_NULL(&tmp);
if (EXPECTED((property_info->flags & ZEND_ACC_STATIC) == 0) &&
property_info->offset >= 0) {
if (zobj->properties) {
- zval tmp;
-
- ZVAL_NULL(&tmp);
retval = zend_hash_update(zobj->properties, property_info->name, &tmp);
ZVAL_INDIRECT(&zobj->properties_table[property_info->offset], retval);
} else {
@@ -796,7 +794,7 @@ static zval *zend_std_get_property_ptr_ptr(zval *object, zval *member, int type,
if (!zobj->properties) {
rebuild_object_properties(zobj);
}
- zend_hash_update(zobj->properties, property_info->name, retval);
+ retval = zend_hash_update(zobj->properties, property_info->name, &tmp);
}
} else {
/* we do have getter - fail and let it try again with usual get/set */