From: Xinchen Hui Date: Sun, 23 Aug 2015 02:40:28 +0000 (+0800) Subject: Revert "Fixed bug #70321 (Magic getter breaks reference to array property)" X-Git-Tag: php-7.0.0RC2~2^2~89 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e26a04f9ecb18fe6d233fb5840f71ad216f27938;p=php Revert "Fixed bug #70321 (Magic getter breaks reference to array property)" This reverts commit 66754585f889e56ddaf3442fd4ac7b9adf93417b. --- diff --git a/NEWS b/NEWS index 4fdf0e698d..f92f2838e2 100644 --- a/NEWS +++ b/NEWS @@ -7,7 +7,6 @@ PHP NEWS . Fixed bug #70300 (Syntactical inconsistency with new group use syntax). (marcio dot web2 at gmail dot com) . Fixed bug causing exception traces with anon classes to be truncated. (Bob) - . Fixed bug #70321 (Magic getter breaks reference to array property). (Bob) - PDO_OCI: . Fixed bug #70308 (PDO::ATTR_PREFETCH is ignored). (Chris Jones) diff --git a/Zend/tests/bug70321.phpt b/Zend/tests/bug70321.phpt deleted file mode 100644 index b1cb87f8ac..0000000000 --- a/Zend/tests/bug70321.phpt +++ /dev/null @@ -1,31 +0,0 @@ ---TEST-- -Bug #70321 (Magic getter breaks reference to array property) ---FILE-- -bar = new bar(); - } - - public function &__get($key) { - $bar = $this->bar; - // no direct reference to $this->bar - return $bar; - } -} - -class bar { public $baz = []; } - -$foo = new foo(); -$foo->bar->baz[] = function() {}; -var_dump($foo->bar->baz); - -?> ---EXPECTF-- -array(1) { - [0]=> - object(Closure)#%d (0) { - } -} diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index edb1f9de7a..59f936d2a3 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -89,7 +89,7 @@ static const zend_internal_function zend_pass_function = { #define zval_ptr_dtor(zv) i_zval_ptr_dtor(zv ZEND_FILE_LINE_CC) #define READY_TO_DESTROY(zv) \ - (EXPECTED(zv) && Z_REFCOUNTED_P(zv) && Z_REFCOUNT_P(zv) == 1 && (EXPECTED(Z_ISREF_P(zv) == 0) || Z_REFCOUNTED_P(Z_REFVAL_P(zv)) && Z_REFCOUNT_P(Z_REFVAL_P(zv)) == 1)) + (UNEXPECTED(zv) && Z_REFCOUNTED_P(zv) && Z_REFCOUNT_P(zv) == 1) #define EXTRACT_ZVAL_PTR(zv, check_null) do { \ zval *__zv = (zv); \