]> granicus.if.org Git - php/commitdiff
Fix HALT constant handling in unicode mode
authorStanislav Malyshev <stas@php.net>
Thu, 28 Jun 2007 20:19:58 +0000 (20:19 +0000)
committerStanislav Malyshev <stas@php.net>
Thu, 28 Jun 2007 20:19:58 +0000 (20:19 +0000)
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_constants.c

index 0173f51f872b5a41a25723c80d4fdecaab727369..84adfcf1004efd1aec15ed96dbde1772c2959eb6 100644 (file)
@@ -3341,12 +3341,12 @@ void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS
 void zend_do_halt_compiler_register(TSRMLS_D)
 {
        char *name, *cfilename;
-       char haltoff[] = "__COMPILER_HALT_OFFSET__";
+       char haltoff[] = ZEND_HALT_CONSTANT_NAME;
        int len, clen;
        cfilename = zend_get_compiled_filename(TSRMLS_C);
        clen = strlen(cfilename);
        zend_mangle_property_name(&name, &len, haltoff,
-               sizeof("__COMPILER_HALT_OFFSET__") - 1, cfilename, clen, 0);
+               sizeof(ZEND_HALT_CONSTANT_NAME)-1, cfilename, clen, 0);
        zend_register_long_constant(name, len+1, zend_get_scanned_file_offset(TSRMLS_C), CONST_CS, 0 TSRMLS_CC);
        pefree(name, 0);
 }
index dbf0dd996e005aae31d8e4d4e3b1381cf9e72bf0..fa22d61867297a8008778e0934f309adb0652c93 100644 (file)
@@ -739,6 +739,8 @@ END_EXTERN_C()
 #define ZEND_TOSTRING_FUNC_NAME     "__tostring"
 #define ZEND_AUTOLOAD_FUNC_NAME     "__autoload"
 
+#define ZEND_HALT_CONSTANT_NAME            "__COMPILER_HALT_OFFSET__"
+
 #endif /* ZEND_COMPILE_H */
 
 /*
index 096e174ac3f2aa2e71217226e3132d3127dfdee5..1434b5101af260d0b1dbac37e2831ff124464028 100644 (file)
@@ -348,10 +348,10 @@ ZEND_API int zend_u_get_constant(zend_uchar type, zstr name, uint name_len, zval
                                retval=0;
                        }
                } else {
-                       char haltoff[] = "__COMPILER_HALT_OFFSET__";
+                       char haltoff[] = ZEND_HALT_CONSTANT_NAME;
                        if (!EG(in_execution)) {
                                retval = 0;
-                       } else if (name_len == sizeof("__COMPILER_HALT_OFFSET__") - 1 && memcmp(haltoff, name.s, name_len) == 0) {
+                       } else if (name_len == sizeof(ZEND_HALT_CONSTANT_NAME)-1 && ZEND_U_EQUAL(type, name, name_len, ZEND_HALT_CONSTANT_NAME, sizeof(ZEND_HALT_CONSTANT_NAME)-1)) {
                                char *cfilename;
                                zstr haltname;
                                int len, clen;
@@ -359,7 +359,7 @@ ZEND_API int zend_u_get_constant(zend_uchar type, zstr name, uint name_len, zval
                                clen = strlen(cfilename);
                                /* check for __COMPILER_HALT_OFFSET__ */
                                zend_mangle_property_name(&haltname.s, &len, haltoff,
-                                       sizeof("__COMPILER_HALT_OFFSET__") - 1, cfilename, clen, 0);
+                                       sizeof(ZEND_HALT_CONSTANT_NAME) - 1, cfilename, clen, 0);
                                if (zend_u_hash_find(EG(zend_constants), IS_STRING, haltname, len+1, (void **) &c) == SUCCESS) {
                                        retval=1;
                                } else {
@@ -394,7 +394,7 @@ ZEND_API int zend_u_register_constant(zend_uchar type, zend_constant *c TSRMLS_D
        zstr lookup_name;
        zstr name;
        int ret = SUCCESS;
-       static char haltoff[] = "__COMPILER_HALT_OFFSET__";
+       static char haltoff[] = ZEND_HALT_CONSTANT_NAME;
 
 #if 0
        printf("Registering constant for module %d\n", c->module_number);
@@ -410,7 +410,7 @@ ZEND_API int zend_u_register_constant(zend_uchar type, zend_constant *c TSRMLS_D
                lookup_name = NULL_ZSTR;
        }
 
-       if (EG(in_execution) && lookup_name_len == sizeof("__COMPILER_HALT_OFFSET__") && memcmp(haltoff, name.s, lookup_name_len) == 0) {
+       if (EG(in_execution) && lookup_name_len == sizeof(ZEND_HALT_CONSTANT_NAME) && ZEND_U_EQUAL(type, name, lookup_name_len-1, ZEND_HALT_CONSTANT_NAME, sizeof(ZEND_HALT_CONSTANT_NAME)-1)) {
                zend_error(E_NOTICE,"Constant %R already defined", type, name);
                if (lookup_name.v) {
                        efree(lookup_name.v);