From: Stanislav Malyshev Date: Thu, 28 Jun 2007 20:19:58 +0000 (+0000) Subject: Fix HALT constant handling in unicode mode X-Git-Tag: BEFORE_IMPORT_OF_MYSQLND~355 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=981ce312fc276f24a12e2548fbcfaac141096490;p=php Fix HALT constant handling in unicode mode --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 0173f51f87..84adfcf100 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -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); } diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index dbf0dd996e..fa22d61867 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -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 */ /* diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 096e174ac3..1434b5101a 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -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);