From: Nikita Popov Date: Thu, 10 Oct 2019 10:44:55 +0000 (+0200) Subject: Fix leak when property AST evaluation fails X-Git-Tag: php-7.4.0RC4~20 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=12f4e9e020c3968c5a201ef96c4ee589ad36e5e5;p=php Fix leak when property AST evaluation fails --- diff --git a/Zend/tests/type_declarations/typed_properties_021.phpt b/Zend/tests/type_declarations/typed_properties_021.phpt index a9f82528d9..93a07771fb 100644 --- a/Zend/tests/type_declarations/typed_properties_021.phpt +++ b/Zend/tests/type_declarations/typed_properties_021.phpt @@ -6,10 +6,11 @@ class Foo { public int $bar = BAR::BAZ; } -$foo = new Foo(); +try { + $foo = new Foo(); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} ?> ---EXPECTF-- -Fatal error: Uncaught Error: Class 'BAR' not found in %s:%d -Stack trace: -#0 {main} - thrown in %s on line %d +--EXPECT-- +Class 'BAR' not found diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 3fef3733f7..8fab994297 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -1228,6 +1228,7 @@ ZEND_API int zend_update_class_constants(zend_class_entry *class_type) /* {{{ */ ZVAL_COPY(&tmp, val); if (UNEXPECTED(zval_update_constant_ex(&tmp, ce) != SUCCESS)) { + zval_ptr_dtor(&tmp); return FAILURE; } /* property initializers must always be evaluated with strict types */;