diff --git a/NEWS b/NEWS index 947dd91d27f..ca2206d8432 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ PHP NEWS SoapServer::setClass() method). (Dmitry) - Added support for hexadecimal entity in imagettftext() for the bundled GD. (Pierre) +- Fixed bug #38653 (memory leak in ReflectionClass::getConstant()). (Tony) - Fixed bug #38637 (curl_copy_handle() fails to fully copy the cURL handle). (Tony, Ilia) - Fixed bug #38624 (Strange warning when incrementing an object property and diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 62d30956fbf..33b08423015 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -211,6 +211,7 @@ static void _default_get_entry(zval *object, char *name, int name_len, zval *ret *return_value = **value; zval_copy_ctor(return_value); + INIT_PZVAL(return_value); } static void reflection_register_implement(zend_class_entry *class_entry, zend_class_entry *interface_entry TSRMLS_DC) @@ -3224,6 +3225,7 @@ ZEND_METHOD(reflection_class, getConstant) } *return_value = **value; zval_copy_ctor(return_value); + INIT_PZVAL(return_value); } /* }}} */ diff --git a/ext/reflection/tests/bug38653.phpt b/ext/reflection/tests/bug38653.phpt new file mode 100644 index 00000000000..68781d2aba1 --- /dev/null +++ b/ext/reflection/tests/bug38653.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #38653 (memory leak in ReflectionClass::getConstant()) +--FILE-- +getConstant("cons")); +var_dump($foo->getConstant("cons1")); +var_dump($foo->getConstant("cons2")); +var_dump($foo->getConstant("no such const")); + +echo "Done\n"; +?> +--EXPECTF-- +int(10) +string(0) "" +string(4) "test" +bool(false) +Done