cvs: ZendEngine2(PHP_5_3) / zend_constants.c /tests bug46304.phpt
[email protected] ("Stanislav Malyshev") Mon, 12 Jan 2009 21:54:37 -0000
| Newsgroups | php.zend-engine.cvs |
|---|---|
| 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