]> granicus.if.org Git - php/commitdiff
Fixed constant substitution (Matt)
authorDmitry Stogov <dmitry@php.net>
Mon, 28 Jul 2008 14:13:12 +0000 (14:13 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 28 Jul 2008 14:13:12 +0000 (14:13 +0000)
Zend/tests/constants_005.phpt [new file with mode: 0755]
Zend/zend_compile.c
Zend/zend_constants.c

diff --git a/Zend/tests/constants_005.phpt b/Zend/tests/constants_005.phpt
new file mode 100755 (executable)
index 0000000..097be97
--- /dev/null
@@ -0,0 +1,11 @@
+--TEST--
+Persistent case insensetive and user defined constants
+--FILE--
+<?php
+var_dump(ZEND_THREAD_safe);
+define("ZEND_THREAD_safe", 123);
+var_dump(ZEND_THREAD_safe);
+?>
+--EXPECTF--
+bool(%s)
+int(123)
index 7c5da606c193d5245ce4fa2d90af65f9f7eee5d1..40fc3a13ff7a42b6e324cbb73e12602fa1ec5c24 100644 (file)
@@ -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;
index 4e433b97b4638e9d3a28354a9a42b15e7d9cdcb2..7763e9fc712ffff5921770f83d4c0521a698c00f 100644 (file)
@@ -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 {