diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-08-14 17:48:57 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2019-08-15 15:24:39 +0200 |
commit | c4cfab8f8425d01cb8beba604d8a3c9f0ec611b7 (patch) | |
tree | 14fbbe67309daf4fd65ca863689a102a3e19b227 | |
parent | 8dc9e843a18b27ff5a8ba9a75c159ceca32c3c30 (diff) | |
download | php-git-c4cfab8f8425d01cb8beba604d8a3c9f0ec611b7.tar.gz |
Fixed bug #78412
$this should only be included in the generator GC buffer, if it
will be released on destruction.
(cherry picked from commit fcabe7e5e44067319f9c4123d71a7cea6a823af4)
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | Zend/zend_generators.c | 4 |
2 files changed, 8 insertions, 2 deletions
@@ -1,5 +1,11 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +?? Aug 2019, PHP 7.3.9 + +- Core: + . Fixed bug #78412 (Generator incorrectly reports non-releasable $this as GC + child). (Nikita) + 15 Aug 2019, PHP 7.3.9RC1 - Core: diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index d3fa86b414..a18a1e8849 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) { |