diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-10-16 16:58:58 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-10-16 16:58:58 +0200 |
commit | 60ece88c28494945c9067448e8f9c4eeb18f8aff (patch) | |
tree | 2d1a0b324a31d9826d43f889ba0bd2d8719a3f34 | |
parent | ab208aa144bfeeb03e710184fa47e6df47753d5d (diff) | |
parent | 28e21d80b0fdee7e4b605adc007f9645a0d830c6 (diff) | |
download | php-git-60ece88c28494945c9067448e8f9c4eeb18f8aff.tar.gz |
Merge branch 'PHP-8.0'
* PHP-8.0:
Fix leak when setting dynamic property on generator
-rw-r--r-- | Zend/tests/generators/dynamic_properties.phpt | 2 | ||||
-rw-r--r-- | Zend/zend_object_handlers.c | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/Zend/tests/generators/dynamic_properties.phpt b/Zend/tests/generators/dynamic_properties.phpt index d42eed914a..08ceb7f581 100644 --- a/Zend/tests/generators/dynamic_properties.phpt +++ b/Zend/tests/generators/dynamic_properties.phpt @@ -9,7 +9,7 @@ function gen() { $gen = gen(); try { - $gen->prop = 42; + $gen->prop = new stdClass; } catch (Error $e) { echo $e->getMessage(), "\n"; } diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index ecf5c71ed8..f091d679f6 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -772,11 +772,10 @@ found: } else { ZEND_ASSERT(!IS_WRONG_PROPERTY_OFFSET(property_offset)); write_std_property: - Z_TRY_ADDREF_P(value); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(property_offset))) { - variable_ptr = OBJ_PROP(zobj, property_offset); + Z_TRY_ADDREF_P(value); if (UNEXPECTED(prop_info)) { ZVAL_COPY_VALUE(&tmp, value); if (UNEXPECTED(!zend_verify_property_type(prop_info, &tmp, property_uses_strict_types()))) { @@ -794,6 +793,8 @@ write_std_property: variable_ptr = &EG(error_zval); goto exit; } + + Z_TRY_ADDREF_P(value); if (!zobj->properties) { rebuild_object_properties(zobj); } |