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