summaryrefslogtreecommitdiff
path: root/Zend/zend_constants.c
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2016-08-03 23:09:17 +0200
committerNikita Popov <nikic@php.net>2016-08-03 23:10:09 +0200
commitec6d70db770874d11f6d76ce31ed9b28e56049a5 (patch)
treeef81969d8e9182a7bad35a2a19a891881fa9e290 /Zend/zend_constants.c
parentb304ab5c70f06fe2d91f76a53bb5e5842473575f (diff)
downloadphp-git-ec6d70db770874d11f6d76ce31ed9b28e56049a5.tar.gz
Fix leak on self-referencing constants
Diffstat (limited to 'Zend/zend_constants.c')
-rw-r--r--Zend/zend_constants.c2
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);