From 373da7aa6f5e7bf57d434fd449f97770fb479d3e Mon Sep 17 00:00:00 2001 From: Joe Watkins Date: Sat, 26 Mar 2016 10:43:56 +0000 Subject: [PATCH] fix standard object handler for properties when type == BP_VAR_IS --- Zend/zend_object_handlers.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 7b31fdc524..9abe3875ef 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -552,6 +552,31 @@ zval *zend_std_read_property(zval *object, zval *member, int type, void **cache_ goto exit; } + /* magic isset */ + if ((type == BP_VAR_IS) && zobj->ce->__isset) { + zval tmp_object, tmp_result; + zend_long *guard = zend_get_property_guard(zobj, Z_STR_P(member)); + + if (!((*guard) & IN_ISSET)) { + ZVAL_COPY(&tmp_object, object); + ZVAL_UNDEF(&tmp_result); + + *guard |= IN_ISSET; + zend_std_call_issetter(&tmp_object, member, &tmp_result); + *guard &= ~IN_ISSET; + + if (!zend_is_true(&tmp_result)) { + retval = &EG(uninitialized_zval); + zval_ptr_dtor(&tmp_object); + zval_ptr_dtor(&tmp_result); + goto exit; + } + + zval_ptr_dtor(&tmp_object); + zval_ptr_dtor(&tmp_result); + } + } + /* magic get */ if (zobj->ce->__get) { zend_long *guard = zend_get_property_guard(zobj, Z_STR_P(member)); -- 2.40.0