Commit:    115c5ec7269c6dd7dfaeaa853a3a78a075d88e17
Author:    Igor Wiedler <i...@wiedler.ch>         Sun, 25 Aug 2013 00:05:55 
+0200
Parents:   85d4cfb00ddda70ae2418db283b0f53431ca62a8
Branches:  PHP-5.6 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=115c5ec7269c6dd7dfaeaa853a3a78a075d88e17

Log:
Compile error on const definition conflicting with import

Changed paths:
  M  Zend/zend_compile.c


Diff:
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 6770670..29d0760 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -7251,6 +7251,7 @@ void zend_do_use_const(znode *ns_name, znode *new_name, 
int is_global TSRMLS_DC)
 void zend_do_declare_constant(znode *name, znode *value TSRMLS_DC) /* {{{ */
 {
        zend_op *opline;
+       zval **ns_name;
 
        if(Z_TYPE(value->u.constant) == IS_CONSTANT_ARRAY) {
                zend_error(E_COMPILE_ERROR, "Arrays are not allowed as 
constants");
@@ -7271,6 +7272,19 @@ void zend_do_declare_constant(znode *name, znode *value 
TSRMLS_DC) /* {{{ */
                *name = tmp;
        }
 
+       /* Constant name must not conflict with import names */
+       if (CG(current_import_const) &&
+           zend_hash_find(CG(current_import_const), 
Z_STRVAL(name->u.constant), Z_STRLEN(name->u.constant)+1, (void**)&ns_name) == 
SUCCESS) {
+
+               char *tmp = zend_str_tolower_dup(Z_STRVAL_PP(ns_name), 
Z_STRLEN_PP(ns_name));
+
+               if (Z_STRLEN_PP(ns_name) != Z_STRLEN(name->u.constant) ||
+                       memcmp(tmp, Z_STRVAL(name->u.constant), 
Z_STRLEN(name->u.constant))) {
+                       zend_error(E_COMPILE_ERROR, "Cannot declare const %s 
because the name is already in use", Z_STRVAL(name->u.constant));
+               }
+               efree(tmp);
+       }
+
        opline = get_next_op(CG(active_op_array) TSRMLS_CC);
        opline->opcode = ZEND_DECLARE_CONST;
        SET_UNUSED(opline->result);


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to