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

Reply via email to