]> granicus.if.org Git - php/commitdiff
Fixed bug #44827 (define() allows :: in constant names).
authorIlia Alshanetsky <iliaa@php.net>
Wed, 30 Dec 2009 19:15:11 +0000 (19:15 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 30 Dec 2009 19:15:11 +0000 (19:15 +0000)
NEWS
Zend/zend_builtin_functions.c

diff --git a/NEWS b/NEWS
index 629ffb55537520f881fbc2fd958580a5f45a153e..cd166dca366aa895303ec3ca39d4df19b3430a0c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,7 @@ PHP                                                                        NEWS
   in HTTP uploads). (Ilia)
 - Fixed bug #47409 (extract() problem with array containing word "this").
   (Ilia, chrisstocktonaz at gmail dot com)
+- Fixed bug #44827 (define() allows :: in constant names). (Ilia)
 
 
 ?? ??? 20??, PHP 5.3.2
index 72372180a8f2b774ad89a7fabad63a453e6ca32d..b9c8b9e8156df170c945c7d98ab675b8847db18c 100644 (file)
@@ -629,7 +629,6 @@ ZEND_FUNCTION(define)
        zend_bool non_cs = 0;
        int case_sensitive = CONST_CS;
        zend_constant c;
-       char *p;
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|b", &name, &name_len, &val, &non_cs) == FAILURE) {
                return;
@@ -640,31 +639,9 @@ ZEND_FUNCTION(define)
        }
 
        /* class constant, check if there is name and make sure class is valid & exists */
-       if ((p = zend_memnstr(name, "::", sizeof("::") - 1, name + name_len))) {
-               char *class_name;
-               int found;
-               zend_class_entry **ce;
-               ALLOCA_FLAG(use_heap)
-
-               if (p == (name + name_len - sizeof("::") + 1)) {
-                       zend_error(E_WARNING, "Class constant must have a name");
-                       RETURN_FALSE;
-               } else if (p == name) {
-                       zend_error(E_WARNING, "Missing class name");
-                       RETURN_FALSE;
-               }
-
-               class_name = do_alloca((p - name + 1), use_heap);
-               zend_str_tolower_copy(class_name, name, (p - name));
-
-               found = zend_hash_find(EG(class_table), class_name, p - name + 1, (void **) &ce);
-
-               if (found != SUCCESS) {
-                       zend_error(E_WARNING, "Class '%s' does not exist", class_name);
-                       free_alloca(class_name, use_heap);
-                       RETURN_FALSE;
-               }
-               free_alloca(class_name, use_heap);
+       if (zend_memnstr(name, "::", sizeof("::") - 1, name + name_len)) {
+               zend_error(E_WARNING, "Class constants cannot be defined or redefined");
+               RETURN_FALSE;
        }
 
 repeat: