From: Nikita Popov Date: Wed, 14 Aug 2019 15:48:57 +0000 (+0200) Subject: Fixed bug #78412 X-Git-Tag: php-7.4.0beta4~13^2^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fcabe7e5e44067319f9c4123d71a7cea6a823af4;p=php Fixed bug #78412 $this should only be included in the generator GC buffer, if it will be released on destruction. --- diff --git a/NEWS b/NEWS index 723be17c71..8ad64104fb 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2019, PHP 7.2.23 +- Core: + . Fixed bug #78412 (Generator incorrectly reports non-releasable $this as GC + child). (Nikita) + 29 Aug 2019, PHP 7.2.22 - Core: diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 666a12fdeb..042ddbc178 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -271,7 +271,7 @@ static uint32_t calc_gc_buffer_size(zend_generator *generator) /* {{{ */ if (EX_CALL_INFO() & ZEND_CALL_FREE_EXTRA_ARGS) { size += EX_NUM_ARGS() - op_array->num_args; } - size += Z_TYPE(execute_data->This) == IS_OBJECT; /* $this */ + size += (EX_CALL_INFO() & ZEND_CALL_RELEASE_THIS) != 0; /* $this */ size += (EX_CALL_INFO() & ZEND_CALL_CLOSURE) != 0; /* Closure object */ /* Live vars */ @@ -352,7 +352,7 @@ static HashTable *zend_generator_get_gc(zval *object, zval **table, int *n) /* { } } - if (Z_TYPE(execute_data->This) == IS_OBJECT) { + if (EX_CALL_INFO() & ZEND_CALL_RELEASE_THIS) { ZVAL_OBJ(gc_buffer++, Z_OBJ(execute_data->This)); } if (EX_CALL_INFO() & ZEND_CALL_CLOSURE) {