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