From ebbd4f094ff435d629686c903da831d7b98adc27 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 28 Jul 2008 14:13:12 +0000 Subject: [PATCH] Fixed constant substitution (Matt) --- Zend/tests/constants_005.phpt | 11 +++++++++++ Zend/zend_compile.c | 8 +++----- Zend/zend_constants.c | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) create mode 100755 Zend/tests/constants_005.phpt diff --git a/Zend/tests/constants_005.phpt b/Zend/tests/constants_005.phpt new file mode 100755 index 0000000000..097be97e14 --- /dev/null +++ b/Zend/tests/constants_005.phpt @@ -0,0 +1,11 @@ +--TEST-- +Persistent case insensetive and user defined constants +--FILE-- + +--EXPECTF-- +bool(%s) +int(123) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 7c5da606c1..40fc3a13ff 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3972,15 +3972,13 @@ static zend_constant* zend_get_ct_const(zval *const_name TSRMLS_DC) /* {{{ */ zstr lookup_name = zend_u_str_case_fold(Z_TYPE_P(const_name), Z_UNIVAL_P(const_name), Z_UNILEN_P(const_name), 1, &lookup_name_len); if (zend_u_hash_find(EG(zend_constants), Z_TYPE_P(const_name), lookup_name, lookup_name_len+1, (void **) &c)==SUCCESS) { - if ((c->flags & CONST_CS) && memcmp(c->name.v, Z_UNIVAL_P(const_name).v, UG(unicode)?UBYTES(Z_USTRLEN_P(const_name)):Z_STRLEN_P(const_name))!=0) { + if ((c->flags & CONST_CT_SUBST) && !(c->flags & CONST_CS)) { efree(lookup_name.v); - return NULL; + return c; } - } else { - efree(lookup_name.v); - return NULL; } efree(lookup_name.v); + return NULL; } if (c->flags & CONST_CT_SUBST) { return c; diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 4e433b97b4..7763e9fc71 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -278,7 +278,7 @@ ZEND_API int zend_u_get_constant(zend_uchar type, zstr name, uint name_len, zval lookup_name = zend_u_str_case_fold(type, name, name_len, 1, &lookup_name_len); if (zend_u_hash_find(EG(zend_constants), type, lookup_name, lookup_name_len+1, (void **) &c)==SUCCESS) { - if ((c->flags & CONST_CS) && memcmp(c->name.v, name.v, UG(unicode)?UBYTES(name_len):name_len)!=0) { + if (c->flags & CONST_CS) { retval=0; } } else { -- 2.50.1