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