diff options
author | Nikita Popov <nikic@php.net> | 2016-09-24 13:22:00 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2016-09-24 13:22:00 +0200 |
commit | 453102b4a0cb02e880bb7b568d71f24acde4246e (patch) | |
tree | 3a6312d36cdccf6a00af197abdb00db184947732 /Zend/zend_execute_API.c | |
parent | c733f92d729a9388e5290de1d45fcd9afa523330 (diff) | |
parent | 8831a12da1671bcfca8607d5af505d69ba938917 (diff) | |
download | php-git-453102b4a0cb02e880bb7b568d71f24acde4246e.tar.gz |
Merge branch 'PHP-7.0' into PHP-7.1
Diffstat (limited to 'Zend/zend_execute_API.c')
-rw-r--r-- | Zend/zend_execute_API.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index dc411af835..2e299e8515 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -587,8 +587,6 @@ ZEND_API int zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */ ZVAL_EMPTY_STRING(p); } } else if (UNEXPECTED((const_value = zend_get_constant_ex(Z_STR_P(p), scope, Z_CONST_FLAGS_P(p))) == NULL)) { - char *actual = Z_STRVAL_P(p); - if (UNEXPECTED(EG(exception))) { RESET_CONSTANT_VISITED(p); return FAILURE; @@ -603,26 +601,29 @@ ZEND_API int zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */ return FAILURE; } else { zend_string *save = Z_STR_P(p); + char *actual = Z_STRVAL_P(p); size_t actual_len = Z_STRLEN_P(p); char *slash = (char *) zend_memrchr(actual, '\\', actual_len); if (slash) { actual = slash + 1; actual_len -= (actual - Z_STRVAL_P(p)); - if (inline_change) { - zend_string *s = zend_string_init(actual, actual_len, 0); - Z_STR_P(p) = s; - Z_TYPE_FLAGS_P(p) = IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE; - } } - zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", actual, actual); + zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", actual, actual); + if (EG(exception)) { + RESET_CONSTANT_VISITED(p); + return FAILURE; + } + if (!inline_change) { ZVAL_STRINGL(p, actual, actual_len); } else { - Z_TYPE_INFO_P(p) = Z_REFCOUNTED_P(p) ? - IS_STRING_EX : IS_INTERNED_STRING_EX; - if (save && ZSTR_VAL(save) != actual) { + if (slash) { + ZVAL_STRINGL(p, actual, actual_len); zend_string_release(save); + } else { + Z_TYPE_INFO_P(p) = Z_REFCOUNTED_P(p) ? + IS_STRING_EX : IS_INTERNED_STRING_EX; } } } |