diff options
author | Nikita Popov <nikic@php.net> | 2016-08-03 23:09:17 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2016-08-03 23:10:09 +0200 |
commit | ec6d70db770874d11f6d76ce31ed9b28e56049a5 (patch) | |
tree | ef81969d8e9182a7bad35a2a19a891881fa9e290 /Zend/zend_constants.c | |
parent | b304ab5c70f06fe2d91f76a53bb5e5842473575f (diff) | |
download | php-git-ec6d70db770874d11f6d76ce31ed9b28e56049a5.tar.gz |
Fix leak on self-referencing constants
Diffstat (limited to 'Zend/zend_constants.c')
-rw-r--r-- | Zend/zend_constants.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 3e09f0cbb8..1759f8dd07 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -375,12 +375,14 @@ ZEND_API zval *zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, if (Z_TYPE_P(ret_constant) == IS_CONSTANT_AST) { if (IS_CONSTANT_VISITED(ret_constant)) { zend_throw_error(NULL, "Cannot declare self-referencing constant '%s::%s'", ZSTR_VAL(class_name), ZSTR_VAL(constant_name)); + ret_constant = NULL; goto failure; } MARK_CONSTANT_VISITED(ret_constant); } if (UNEXPECTED(zval_update_constant_ex(ret_constant, ce) != SUCCESS)) { RESET_CONSTANT_VISITED(ret_constant); + ret_constant = NULL; goto failure; } RESET_CONSTANT_VISITED(ret_constant); |