cvs: ZendEngine2(PHP_5_3) / zend_constants.c /tests bug46304.phpt

"Stanislav Malyshev" <[email protected]>
Newsgroups gmane.comp.php.cvs.zend
Message-ID <cvsstas1231797277@cvsserver>
stas		Mon Jan 12 21:54:37 2009 UTC

  Added files:                 (Branch: PHP_5_3)
    /ZendEngine2/tests	bug46304.phpt 

  Modified files:              
    /ZendEngine2	zend_constants.c 
  Log:
  fix #46304: Defining namespaced constant using define() uses case sensitive match for namespace 
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_constants.c?r1=1.71.2.5.2.7.2.16&r2=1.71.2.5.2.7.2.17&diff_format=u
Index: ZendEngine2/zend_constants.c
diff -u ZendEngine2/zend_constants.c:1.71.2.5.2.7.2.16 ZendEngine2/zend_constants.c:1.71.2.5.2.7.2.17
--- ZendEngine2/zend_constants.c:1.71.2.5.2.7.2.16	Wed Dec 31 11:15:32 2008
+++ ZendEngine2/zend_constants.c	Mon Jan 12 21:54:37 2009
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_constants.c,v 1.71.2.5.2.7.2.16 2008/12/31 11:15:32 sebastian Exp $ */
+/* $Id: zend_constants.c,v 1.71.2.5.2.7.2.17 2009/01/12 21:54:37 stas Exp $ */
 
 #include "zend.h"
 #include "zend_constants.h"
@@ -357,6 +357,7 @@
 		int const_name_len = name_len - prefix_len - 1;
 		char *constant_name = colon + 1;
 		char *lcname;
+		int found_const = 0;
 
 		lcname = zend_str_tolower_dup(name, prefix_len);
 		/* Check for namespace constant */
@@ -367,7 +368,18 @@
 		memcpy(lcname + prefix_len + 1, constant_name, const_name_len + 1);
 
 		if (zend_hash_find(EG(zend_constants), lcname, prefix_len + 1 + const_name_len + 1, (void **) &c) == SUCCESS) {
-			efree(lcname);
+			found_const = 1;
+		} else {
+			/* try lowercase */
+			zend_str_tolower(lcname + prefix_len + 1, const_name_len);
+			if (zend_hash_find(EG(zend_constants), lcname, prefix_len + 1 + const_name_len + 1, (void **) &c) == SUCCESS) {
+				if ((c->flags & CONST_CS) == 0) {
+					found_const = 1;
+				}
+			}
+		}
+		efree(lcname);
+		if(found_const) {
 			*result = c->value;
 			zval_update_constant_ex(&result, (void*)1, NULL TSRMLS_CC);
 			zval_copy_ctor(result);
@@ -375,8 +387,6 @@
 			Z_UNSET_ISREF_P(result);
 			return 1;
 		}
-
-		efree(lcname);
 		/* name requires runtime resolution, need to check non-namespaced name */
 		if ((flags & IS_CONSTANT_UNQUALIFIED) != 0) {
 			name = constant_name;
@@ -414,7 +424,14 @@
 		zend_str_tolower(lowercase_name, c->name_len-1);
 		name = lowercase_name;
 	} else {
-		name = c->name;
+		char *slash = strrchr(c->name, '\\');
+		if(slash) {
+			lowercase_name = estrndup(c->name, c->name_len-1);
+			zend_str_tolower(lowercase_name, slash-c->name);
+			name = lowercase_name;
+		} else {
+			name = c->name;
+		}
 	}
 
 	if ((strncmp(name, "__COMPILER_HALT_OFFSET__", sizeof("__COMPILER_HALT_OFFSET__") - 1) == 0) ||

http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug46304.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/bug46304.phpt
+++ ZendEngine2/tests/bug46304.phpt



-- 
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.