From 12f4e9e020c3968c5a201ef96c4ee589ad36e5e5 Mon Sep 17 00:00:00 2001 From: Nikita Popov <nikita.ppv@gmail.com> Date: Thu, 10 Oct 2019 12:44:55 +0200 Subject: [PATCH] Fix leak when property AST evaluation fails --- .../type_declarations/typed_properties_021.phpt | 13 +++++++------ Zend/zend_API.c | 1 + 2 files changed, 8 insertions(+), 6 deletions(-) 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 */; -- 2.40.0