tony2001                Wed Dec  6 17:42:47 2006 UTC

  Modified files:              
    /php-src/ext/standard       array.c basic_functions.c basic_functions.h 
  Log:
  fix import_request_variables()
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.396&r2=1.397&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.396 php-src/ext/standard/array.c:1.397
--- php-src/ext/standard/array.c:1.396  Tue Dec  5 23:17:06 2006
+++ php-src/ext/standard/array.c        Wed Dec  6 17:42:47 2006
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.396 2006/12/05 23:17:06 andrei Exp $ */
+/* $Id: array.c,v 1.397 2006/12/06 17:42:47 tony2001 Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -1280,16 +1280,21 @@
 }
 
 PHPAPI int php_prefix_varname(zval *result, zval *prefix, zstr var_name,
-                                                         int var_name_len, int 
var_name_type TSRMLS_DC)
+                                                         int var_name_len, int 
var_name_type, zend_bool add_underscore TSRMLS_DC)
 {
-       Z_UNILEN_P(result) = Z_UNILEN_P(prefix) + 1 + var_name_len;
+       Z_UNILEN_P(result) = Z_UNILEN_P(prefix) + (add_underscore ? 1 : 0) + 
var_name_len;
+       
        if (UG(unicode)) {
                Z_TYPE_P(result) = IS_UNICODE;
                Z_USTRVAL_P(result) = eumalloc(Z_USTRLEN_P(result)+1);
                u_memcpy(Z_USTRVAL_P(result), Z_USTRVAL_P(prefix), 
Z_USTRLEN_P(prefix));
-               Z_USTRVAL_P(result)[Z_USTRLEN_P(prefix)] = (UChar) 0x5f /*'_'*/;
+               
+               if (add_underscore) {
+                       Z_USTRVAL_P(result)[Z_USTRLEN_P(prefix)] = (UChar) 0x5f 
/*'_'*/;
+               }
+               
                if (var_name_type == IS_UNICODE) {
-                       u_memcpy(Z_USTRVAL_P(result)+Z_USTRLEN_P(prefix)+1, 
var_name.u, var_name_len+1);
+                       u_memcpy(Z_USTRVAL_P(result)+Z_USTRLEN_P(prefix) + 
(add_underscore ? 1 : 0), var_name.u, var_name_len+1);
                } else {
                        UChar *buf;
                        int buf_len;
@@ -1304,19 +1309,23 @@
                                return FAILURE;
                        }
                        if (buf_len > var_name_len) {
-                               Z_USTRLEN_P(result) = Z_USTRLEN_P(prefix) + 1 + 
buf_len;
-                               Z_USTRVAL_P(result) = 
eurealloc(Z_USTRVAL_P(result), Z_USTRLEN_P(result)+1);
+                               Z_USTRLEN_P(result) = Z_USTRLEN_P(prefix) + 
(add_underscore ? 1 : 0) + buf_len;
+                               Z_USTRVAL_P(result) = 
eurealloc(Z_USTRVAL_P(result), Z_USTRLEN_P(result) + 1);
                        }
-                       u_memcpy(Z_USTRVAL_P(result)+Z_USTRLEN_P(prefix)+1, 
buf, buf_len+1);
+                       u_memcpy(Z_USTRVAL_P(result)+Z_USTRLEN_P(prefix) + 
(add_underscore ? 1 : 0), buf, buf_len+1);
                        efree(buf);
                }
        } else {
                Z_TYPE_P(result) = IS_STRING;
                Z_STRVAL_P(result) = emalloc(Z_STRLEN_P(result)+1);
                memcpy(Z_STRVAL_P(result), Z_STRVAL_P(prefix), 
Z_STRLEN_P(prefix));
-               Z_STRVAL_P(result)[Z_STRLEN_P(prefix)] = '_';
+
+               if (add_underscore) {
+                       Z_STRVAL_P(result)[Z_STRLEN_P(prefix)] = '_';
+               }
+
                if (var_name_type == IS_STRING) {
-                       memcpy(Z_STRVAL_P(result)+Z_STRLEN_P(prefix)+1, 
var_name.s, var_name_len+1);
+                       memcpy(Z_STRVAL_P(result)+Z_STRLEN_P(prefix) + 
(add_underscore ? 1 : 0), var_name.s, var_name_len+1);
                } else {
                        char *buf;
                        int buf_len;
@@ -1331,10 +1340,10 @@
                                return FAILURE;
                        }
                        if (buf_len > var_name_len) {
-                               Z_STRLEN_P(result) = Z_STRLEN_P(prefix) + 1 + 
buf_len;
-                               Z_STRVAL_P(result) = 
erealloc(Z_STRVAL_P(result), Z_STRLEN_P(result)+1);
+                               Z_STRLEN_P(result) = Z_STRLEN_P(prefix) + 
(add_underscore ? 1 : 0) + buf_len;
+                               Z_STRVAL_P(result) = 
erealloc(Z_STRVAL_P(result), Z_STRLEN_P(result) + 1);
                        }
-                       memcpy(Z_STRVAL_P(result)+Z_STRLEN_P(prefix)+1, buf, 
buf_len+1);
+                       memcpy(Z_STRVAL_P(result)+Z_STRLEN_P(prefix) + 
(add_underscore ? 1 : 0), buf, buf_len+1);
                        efree(buf);
                }
        }
@@ -1408,7 +1417,7 @@
 
                        ZVAL_LONG(&num, num_key);
                        convert_to_text(&num);
-                       php_prefix_varname(&final_name, prefix, Z_UNIVAL(num), 
Z_UNILEN(num), Z_TYPE(num) TSRMLS_CC);
+                       php_prefix_varname(&final_name, prefix, Z_UNIVAL(num), 
Z_UNILEN(num), Z_TYPE(num), 1 TSRMLS_CC);
                        zval_dtor(&num);
                } else {
                        zend_hash_move_forward_ex(Z_ARRVAL_P(var_array), &pos);
@@ -1432,7 +1441,7 @@
 
                        case EXTR_PREFIX_IF_EXISTS:
                                if (var_exists) {
-                                       php_prefix_varname(&final_name, prefix, 
var_name, var_name_len, key_type TSRMLS_CC);
+                                       php_prefix_varname(&final_name, prefix, 
var_name, var_name_len, key_type, 1 TSRMLS_CC);
                                }
                                break;
 
@@ -1444,14 +1453,14 @@
 
                        case EXTR_PREFIX_ALL:
                                if (Z_TYPE(final_name) == IS_NULL && 
var_name_len != 0) {
-                                       php_prefix_varname(&final_name, prefix, 
var_name, var_name_len, key_type TSRMLS_CC);
+                                       php_prefix_varname(&final_name, prefix, 
var_name, var_name_len, key_type, 1 TSRMLS_CC);
                                }
                                break;
 
                        case EXTR_PREFIX_INVALID:
                                if (Z_TYPE(final_name) == IS_NULL) {
                                        if (!php_valid_var_name(var_name, 
var_name_len, key_type)) {
-                                               php_prefix_varname(&final_name, 
prefix, var_name, var_name_len, key_type TSRMLS_CC);
+                                               php_prefix_varname(&final_name, 
prefix, var_name, var_name_len, key_type, 1 TSRMLS_CC);
                                        } else {
                                                ZVAL_ZSTRL(&final_name, 
var_name, var_name_len, key_type, 1);
                                        }
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.829&r2=1.830&diff_format=u
Index: php-src/ext/standard/basic_functions.c
diff -u php-src/ext/standard/basic_functions.c:1.829 
php-src/ext/standard/basic_functions.c:1.830
--- php-src/ext/standard/basic_functions.c:1.829        Tue Dec  5 04:52:44 2006
+++ php-src/ext/standard/basic_functions.c      Wed Dec  6 17:42:47 2006
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: basic_functions.c,v 1.829 2006/12/05 04:52:44 pollita Exp $ */
+/* $Id: basic_functions.c,v 1.830 2006/12/06 17:42:47 tony2001 Exp $ */
 
 #include "php.h"
 #include "php_streams.h"
@@ -6252,17 +6252,17 @@
        }
 
        if (hash_key->nKeyLength) {
-               php_prefix_varname(&new_key, prefix, hash_key->arKey, 
hash_key->nKeyLength, hash_key->type TSRMLS_CC);
+               php_prefix_varname(&new_key, prefix, hash_key->arKey, 
hash_key->nKeyLength-1, hash_key->type, 0 TSRMLS_CC);
        } else {
                zval num;
                ZVAL_LONG(&num, hash_key->h);
                convert_to_text(&num);
-               php_prefix_varname(&new_key, prefix, Z_UNIVAL(num), 
Z_UNILEN(num), Z_TYPE(num) TSRMLS_CC);
+               php_prefix_varname(&new_key, prefix, Z_UNIVAL(num), 
Z_UNILEN(num), Z_TYPE(num), 0 TSRMLS_CC);
                zval_dtor(&num);
        }
 
        zend_u_delete_global_variable(Z_TYPE(new_key), Z_UNIVAL(new_key), 
Z_UNILEN(new_key) TSRMLS_CC);
-       ZEND_U_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), Z_TYPE(new_key), 
Z_UNIVAL(new_key), Z_UNILEN(new_key), *var, (*var)->refcount+1, 0);
+       ZEND_U_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), Z_TYPE(new_key), 
Z_UNIVAL(new_key), Z_UNILEN(new_key) + 1, *var, (*var)->refcount+1, 0);
 
        zval_dtor(&new_key);
        return 0;
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.h?r1=1.152&r2=1.153&diff_format=u
Index: php-src/ext/standard/basic_functions.h
diff -u php-src/ext/standard/basic_functions.h:1.152 
php-src/ext/standard/basic_functions.h:1.153
--- php-src/ext/standard/basic_functions.h:1.152        Tue Nov 21 22:21:38 2006
+++ php-src/ext/standard/basic_functions.h      Wed Dec  6 17:42:47 2006
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: basic_functions.h,v 1.152 2006/11/21 22:21:38 andrei Exp $ */
+/* $Id: basic_functions.h,v 1.153 2006/12/06 17:42:47 tony2001 Exp $ */
 
 #ifndef BASIC_FUNCTIONS_H
 #define BASIC_FUNCTIONS_H
@@ -139,7 +139,7 @@
 
 PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers 
TSRMLS_DC);
 PHPAPI char *php_get_current_user();
-PHPAPI int php_prefix_varname(zval *result, zval *prefix, zstr var_name, int 
var_name_len, int var_name_type TSRMLS_DC);
+PHPAPI int php_prefix_varname(zval *result, zval *prefix, zstr var_name, int 
var_name_len, int var_name_type, zend_bool add_underscore TSRMLS_DC);
 
 #if SIZEOF_INT == 4
 /* Most 32-bit and 64-bit systems have 32-bit ints */

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to