summaryrefslogtreecommitdiff
path: root/Zend/zend_execute_API.c
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2016-09-24 13:22:00 +0200
committerNikita Popov <nikic@php.net>2016-09-24 13:22:00 +0200
commit453102b4a0cb02e880bb7b568d71f24acde4246e (patch)
tree3a6312d36cdccf6a00af197abdb00db184947732 /Zend/zend_execute_API.c
parentc733f92d729a9388e5290de1d45fcd9afa523330 (diff)
parent8831a12da1671bcfca8607d5af505d69ba938917 (diff)
downloadphp-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.c23
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;
}
}
}