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

Reply via email to