diff options
Diffstat (limited to 'Zend/zend_object_handlers.c')
-rw-r--r-- | Zend/zend_object_handlers.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 0c0a4522a9..49dbf5ceb1 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -345,7 +345,6 @@ zval *zend_std_read_property(zval *object, zval *member, int type TSRMLS_DC) /* zend_get_property_guard(zobj, property_info, member, &guard) == SUCCESS && !guard->in_get) { /* have getter - try with it! */ - Z_ADDREF_P(object); guard->in_get = 1; /* prevent circular getting */ rv = zend_std_call_getter(object, member TSRMLS_CC); guard->in_get = 0; @@ -370,7 +369,6 @@ zval *zend_std_read_property(zval *object, zval *member, int type TSRMLS_DC) /* } else { retval = &EG(uninitialized_zval_ptr); } - zval_ptr_dtor(&object); } else { if (!silent) { zend_error(E_NOTICE,"Undefined property: %s::$%s", zobj->ce->name, Z_STRVAL_P(member)); @@ -441,14 +439,12 @@ static void zend_std_write_property(zval *object, zval *member, zval *value TSRM if (zobj->ce->__set && zend_get_property_guard(zobj, property_info, member, &guard) == SUCCESS && !guard->in_set) { - Z_ADDREF_P(object); guard->in_set = 1; /* prevent circular setting */ if (zend_std_call_setter(object, member, value TSRMLS_CC) != SUCCESS) { /* for now, just ignore it - __set should take care of warnings, etc. */ } setter_done = 1; guard->in_set = 0; - zval_ptr_dtor(&object); } if (!setter_done && property_info) { zval **foo; @@ -624,11 +620,9 @@ static void zend_std_unset_property(zval *object, zval *member TSRMLS_DC) /* {{{ zend_get_property_guard(zobj, property_info, member, &guard) == SUCCESS && !guard->in_unset) { /* have unseter - try with it! */ - Z_ADDREF_P(object); guard->in_unset = 1; /* prevent circular unsetting */ zend_std_call_unsetter(object, member TSRMLS_CC); guard->in_unset = 0; - zval_ptr_dtor(&object); } } @@ -1123,7 +1117,6 @@ static int zend_std_has_property(zval *object, zval *member, int has_set_exists zval *rv; /* have issetter - try with it! */ - Z_ADDREF_P(object); guard->in_isset = 1; /* prevent circular getting */ rv = zend_std_call_issetter(object, member TSRMLS_CC); if (rv) { @@ -1147,7 +1140,6 @@ static int zend_std_has_property(zval *object, zval *member, int has_set_exists } } guard->in_isset = 0; - zval_ptr_dtor(&object); } } else { switch (has_set_exists) { @@ -1270,7 +1262,7 @@ ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int ty } /* }}} */ -int zend_std_get_closure(zval *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zval **zobj_ptr TSRMLS_DC) /* {{{ */ +int zend_std_get_closure(zval *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zval **zobj_ptr, zval ***zobj_ptr_ptr TSRMLS_DC) /* {{{ */ { zend_class_entry *ce; if (Z_TYPE_P(obj) != IS_OBJECT) { @@ -1288,10 +1280,16 @@ int zend_std_get_closure(zval *obj, zend_class_entry **ce_ptr, zend_function **f if (zobj_ptr) { *zobj_ptr = NULL; } + if (zobj_ptr_ptr) { + *zobj_ptr_ptr = NULL; + } } else { if (zobj_ptr) { *zobj_ptr = obj; } + if (zobj_ptr_ptr) { + *zobj_ptr_ptr = NULL; + } } return SUCCESS; } |