From: Jani Taskinen Date: Fri, 10 Aug 2007 12:17:26 +0000 (+0000) Subject: - Fix the fix for bug #42233 X-Git-Tag: php-5.2.4RC2~40 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c4be8ab831ac4c9756f439e8a6f88ba13676f5e9;p=php - Fix the fix for bug #42233 --- diff --git a/ext/standard/array.c b/ext/standard/array.c index 8fdff262bf..b9937e4993 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1282,32 +1282,34 @@ PHP_FUNCTION(array_search) static int php_valid_var_name(char *var_name, int len) /* {{{ */ { - int i; + int i, ch; if (!var_name) 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])) + ch = (int)((unsigned char *)var_name)[0]; + if (var_name[0] != '_' && + (ch < 65 /* A */ || /* Z */ ch > 90) && + (ch < 97 /* a */ || /* z */ ch > 122) && + (ch < 127 /* 0x7f */ || /* 0xff */ ch > 255) ) { - /* 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; - } + return 0; + } + + /* And these as the rest: [a-zA-Z0-9_\x7f-\xff] */ + if (len > 1) { + for (i = 1; i < len; i++) { + ch = (int)((unsigned char *)var_name)[i]; + if (var_name[i] != '_' && + (ch < 48 /* 0 */ || /* 9 */ ch > 57) && + (ch < 65 /* A */ || /* Z */ ch > 90) && + (ch < 97 /* a */ || /* z */ ch > 122) && + (ch < 127 /* 0x7f */ || /* 0xff */ ch > 255) + ) { + return 0; } } - } else { - return 0; } return 1; } diff --git a/ext/standard/tests/array/bug42233.phpt b/ext/standard/tests/array/bug42233.phpt new file mode 100644 index 0000000000..0cebc428f7 --- /dev/null +++ b/ext/standard/tests/array/bug42233.phpt @@ -0,0 +1,33 @@ +--TEST-- +Bug #42233 (extract(): scandic characters not allowed as variable name) +--FILE-- + '1', + 'æ' => '2', + 'æøåäö' => '3', +); + +var_dump($test); +var_dump(extract($test)); +var_dump($a); +var_dump($æ); +var_dump($æøåäö); + +echo "Done.\n"; +?> +--EXPECT-- +array(3) { + ["a"]=> + string(1) "1" + ["æ"]=> + string(1) "2" + ["æøåäö"]=> + string(1) "3" +} +int(3) +string(1) "1" +string(1) "2" +string(1) "3" +Done.