jani Wed Aug 8 07:46:01 2007 UTC Modified files: /php-src/ext/standard array.c Log: MFB: Fix bug #42233 http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.411&r2=1.412&diff_format=u Index: php-src/ext/standard/array.c diff -u php-src/ext/standard/array.c:1.411 php-src/ext/standard/array.c:1.412 --- php-src/ext/standard/array.c:1.411 Mon Jul 9 14:32:59 2007 +++ php-src/ext/standard/array.c Wed Aug 8 07:46:00 2007 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: array.c,v 1.411 2007/07/09 14:32:59 dmitry Exp $ */ +/* $Id: array.c,v 1.412 2007/08/08 07:46:00 jani Exp $ */ #include "php.h" #include "php_ini.h" @@ -1276,22 +1276,33 @@ return 0; if (var_name_type == IS_STRING) { - if (!isalpha((int)((unsigned char *)var_name.s)[0]) && var_name.s[0] != '_') - return 0; - - if (var_name_len > 1) { - for (i=1; i<var_name_len; i++) { - if (!isalnum((int)((unsigned char *)var_name.s)[i]) && var_name.s[i] != '_') { - return 0; + /* These are allowed as first char: [a-zA-Z_\x7f-\xff] */ + if (var_name[0] == '_' || + (((int)((unsigned char *)var_name)[0]) >= 65 /* A */ && /* Z */ 90 <= ((int)((unsigned char *)var_name)[0])) || + (((int)((unsigned char *)var_name)[0]) >= 97 /* a */ && /* z */ 122 <= ((int)((unsigned char *)var_name)[0])) || + (((int)((unsigned char *)var_name)[0]) >= 127 /* 0x7f */ && /* 0xff */ 255 <= ((int)((unsigned char *)var_name)[0])) + ) { + /* And these as the rest: [a-zA-Z0-9_\x7f-\xff] */ + if (len > 1) { + for (i = 1; i < len; i++) { + if (var_name[i] == '_' || + (((int)((unsigned char *)var_name)[i]) >= 48 /* 0 */ && /* 9 */ 57 <= ((int)((unsigned char *)var_name)[i])) || + (((int)((unsigned char *)var_name)[i]) >= 65 /* A */ && /* Z */ 90 <= ((int)((unsigned char *)var_name)[i])) || + (((int)((unsigned char *)var_name)[i]) >= 97 /* a */ && /* z */ 122 <= ((int)((unsigned char *)var_name)[i])) || + (((int)((unsigned char *)var_name)[i]) >= 127 /* 0x7f */ && /* 0xff */ 255 <= ((int)((unsigned char *)var_name)[i])) + ) { } else { + return 0; + } } } + } else { + return 0; } } else { if (!zend_is_valid_identifier(var_name.u, var_name_len)) { return 0; } } - return 1; } /* }}} */ @@ -1449,7 +1460,7 @@ case EXTR_OVERWRITE: if (var_exists && var_name_len == sizeof("GLOBALS") && - ZEND_U_EQUAL(key_type, var_name, var_name_len-1, "GLOBALS", sizeof("GLOBALS")-1)) { + ZEND_U_EQUAL(key_type, var_name, var_name_len-1, "GLOBALS", sizeof("GLOBALS")-1)) { break; } @@ -1705,8 +1716,8 @@ if (zstep) { if (Z_TYPE_P(zstep) == IS_DOUBLE || - (Z_TYPE_P(zstep) == IS_STRING && is_numeric_string(Z_STRVAL_P(zstep), Z_STRLEN_P(zstep), NULL, NULL, 0) == IS_DOUBLE) || - (Z_TYPE_P(zstep) == IS_UNICODE && is_numeric_unicode(Z_USTRVAL_P(zstep), Z_USTRLEN_P(zstep), NULL, NULL, 0) == IS_DOUBLE)) { + (Z_TYPE_P(zstep) == IS_STRING && is_numeric_string(Z_STRVAL_P(zstep), Z_STRLEN_P(zstep), NULL, NULL, 0) == IS_DOUBLE) || + (Z_TYPE_P(zstep) == IS_UNICODE && is_numeric_unicode(Z_USTRVAL_P(zstep), Z_USTRLEN_P(zstep), NULL, NULL, 0) == IS_DOUBLE)) { is_step_double = 1; } @@ -2096,7 +2107,7 @@ static void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int off_the_end) { zval *stack, /* Input stack */ - **val; /* Value to be popped */ + **val; /* Value to be popped */ zstr key = NULL_ZSTR; uint key_len = 0; ulong index;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php