jani Fri Aug 10 12:23:16 2007 UTC Modified files: /php-src/ext/standard array.c /php-src/ext/standard/tests/array bug42233.phpt Log: MFB: Fixed the fix for bug #42233 and added test for it. http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.413&r2=1.414&diff_format=u Index: php-src/ext/standard/array.c diff -u php-src/ext/standard/array.c:1.413 php-src/ext/standard/array.c:1.414 --- php-src/ext/standard/array.c:1.413 Wed Aug 8 14:52:40 2007 +++ php-src/ext/standard/array.c Fri Aug 10 12:23:16 2007 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: array.c,v 1.413 2007/08/08 14:52:40 johannes Exp $ */ +/* $Id: array.c,v 1.414 2007/08/10 12:23:16 jani Exp $ */ #include "php.h" #include "php_ini.h" @@ -1270,33 +1270,36 @@ static int php_valid_var_name(zstr var_name, int var_name_len, int var_name_type) /* {{{ */ { - int i; - - if (!var_name.v) + int i, ch; + + if (!var_name.v) { return 0; - + } + if (var_name_type == IS_STRING) { /* These are allowed as first char: [a-zA-Z_\x7f-\xff] */ - if (((unsigned char *)var_name.s)[0] == '_' || - (((int)((unsigned char *)var_name.s)[0]) >= 65 /* A */ && /* Z */ 90 <= ((int)((unsigned char *)var_name.s)[0])) || - (((int)((unsigned char *)var_name.s)[0]) >= 97 /* a */ && /* z */ 122 <= ((int)((unsigned char *)var_name.s)[0])) || - (((int)((unsigned char *)var_name.s)[0]) >= 127 /* 0x7f */ && /* 0xff */ 255 <= ((int)((unsigned char *)var_name.s)[0])) + ch = (int)((unsigned char *)var_name.s)[0]; + if (var_name.s[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 (var_name_len > 1) { - for (i = 1; i < var_name_len; i++) { - if (((unsigned char*)var_name.s)[i] == '_' || - (((int)((unsigned char *)var_name.s)[i]) >= 48 /* 0 */ && /* 9 */ 57 <= ((int)((unsigned char*)var_name.s)[i])) || - (((int)((unsigned char *)var_name.s)[i]) >= 65 /* A */ && /* Z */ 90 <= ((int)((unsigned char*)var_name.s)[i])) || - (((int)((unsigned char *)var_name.s)[i]) >= 97 /* a */ && /* z */ 122 <= ((int)((unsigned char*)var_name.s)[i])) || - (((int)((unsigned char *)var_name.s)[i]) >= 127 /* 0x7f */ && /* 0xff */ 255 <= ((int)((unsigned char*)var_name.s)[i])) - ) { } else { - return 0; - } + return 0; + } + + /* And these as the rest: [a-zA-Z0-9_\x7f-\xff] */ + if (var_name_len > 1) { + for (i = 1; i < var_name_len; i++) { + ch = (int)((unsigned char *)var_name.s)[i]; + if (var_name.s[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; } } else { if (!zend_is_valid_identifier(var_name.u, var_name_len)) { http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/bug42233.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/standard/tests/array/bug42233.phpt diff -u /dev/null php-src/ext/standard/tests/array/bug42233.phpt:1.2 --- /dev/null Fri Aug 10 12:23:16 2007 +++ php-src/ext/standard/tests/array/bug42233.phpt Fri Aug 10 12:23:16 2007 @@ -0,0 +1,47 @@ +--TEST-- +Bug #42233 (extract(): scandic characters not allowed as variable name) +--FILE-- +<?php + +$test = array( + 'a' => '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. +--UEXPECT-- +array(3) { + [u"a"]=> + unicode(1) "1" + [u"æ"]=> + unicode(1) "2" + [u"æøåäö"]=> + unicode(1) "3" +} +int(3) +unicode(1) "1" +unicode(1) "2" +unicode(1) "3" +Done.
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php