Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:26695 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 49080 invoked by uid 1010); 21 Nov 2006 21:52:21 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 49065 invoked from network); 21 Nov 2006 21:52:21 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 21 Nov 2006 21:52:21 -0000 Authentication-Results: pb1.pair.com smtp.mail=andrei@gravitonic.com; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=andrei@gravitonic.com; sender-id=unknown Received-SPF: error (pb1.pair.com: domain gravitonic.com from 204.11.219.139 cause and error) X-PHP-List-Original-Sender: andrei@gravitonic.com X-Host-Fingerprint: 204.11.219.139 lerdorf.com Linux 2.5 (sometimes 2.4) (4) Received: from [204.11.219.139] ([204.11.219.139:48027] helo=lerdorf.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 23/15-12363-21573654 for ; Tue, 21 Nov 2006 16:52:20 -0500 Received: from [66.228.175.145] (borndress-lm.corp.yahoo.com [66.228.175.145]) (authenticated bits=0) by lerdorf.com (8.13.8/8.13.8/Debian-2) with ESMTP id kALLqFtr002307 for ; Tue, 21 Nov 2006 13:52:15 -0800 Mime-Version: 1.0 (Apple Message framework v624) To: php-dev Internals Message-ID: <1b0c626fa1641bf2aced94d12ee1652d@gravitonic.com> Content-Type: multipart/mixed; boundary=Apple-Mail-1--992351701 Date: Tue, 21 Nov 2006 13:52:05 -0800 X-Mailer: Apple Mail (2.624) Subject: Please test import_request_variables() patch From: andrei@gravitonic.com (Andrei Zmievski) --Apple-Mail-1--992351701 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Could someone with PHP 6 as Apache module please test this patch for import_request_variables()? -A --Apple-Mail-1--992351701 Content-Transfer-Encoding: 7bit Content-Type: text/plain; x-unix-mode=0644; name="irv.diff.txt" Content-Disposition: attachment; filename=irv.diff.txt ? ext/standard/.array.c.swp ? ext/standard/.basic_functions.c.swp Index: ext/standard/array.c =================================================================== RCS file: /repository/php-src/ext/standard/array.c,v retrieving revision 1.393 diff -p -u -r1.393 array.c --- ext/standard/array.c 15 Nov 2006 22:43:19 -0000 1.393 +++ ext/standard/array.c 21 Nov 2006 21:34:06 -0000 @@ -1279,8 +1279,8 @@ static int php_valid_var_name(zstr var_n return 1; } -static int php_extract_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 TSRMLS_DC) { Z_UNILEN_P(result) = Z_UNILEN_P(prefix) + 1 + var_name_len; if (UG(unicode)) { @@ -1408,7 +1408,7 @@ PHP_FUNCTION(extract) ZVAL_LONG(&num, num_key); convert_to_text(&num); - php_extract_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) TSRMLS_CC); zval_dtor(&num); } else { zend_hash_move_forward_ex(Z_ARRVAL_P(var_array), &pos); @@ -1432,7 +1432,7 @@ PHP_FUNCTION(extract) case EXTR_PREFIX_IF_EXISTS: if (var_exists) { - php_extract_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 TSRMLS_CC); } break; @@ -1444,14 +1444,14 @@ PHP_FUNCTION(extract) case EXTR_PREFIX_ALL: if (Z_TYPE(final_name) == IS_NULL && var_name_len != 0) { - php_extract_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 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_extract_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 TSRMLS_CC); } else { ZVAL_TEXTL(&final_name, var_name, var_name_len, 1); } Index: ext/standard/basic_functions.c =================================================================== RCS file: /repository/php-src/ext/standard/basic_functions.c,v retrieving revision 1.824 diff -p -u -r1.824 basic_functions.c --- ext/standard/basic_functions.c 21 Nov 2006 18:45:21 -0000 1.824 +++ ext/standard/basic_functions.c 21 Nov 2006 21:34:06 -0000 @@ -6215,17 +6215,17 @@ PHP_FUNCTION(parse_ini_file) static int copy_request_variable(void *pDest, int num_args, va_list args, zend_hash_key *hash_key) { - char *prefix, *new_key; - uint prefix_len, new_key_len; + zval *prefix, new_key; + int prefix_len; zval **var = (zval **) pDest; TSRMLS_FETCH(); - if (num_args != 2) { + if (num_args != 1) { return 0; } - prefix = va_arg(args, char *); - prefix_len = va_arg(args, uint); + prefix = va_arg(args, zval *); + prefix_len = Z_UNILEN_P(prefix); if (!prefix_len) { if (!hash_key->nKeyLength) { @@ -6239,20 +6239,19 @@ static int copy_request_variable(void *p } if (hash_key->nKeyLength) { - new_key_len = prefix_len + hash_key->nKeyLength; - new_key = (char *) emalloc(new_key_len); - - memcpy(new_key, prefix, prefix_len); - /* FIXME: Unicode support??? */ - memcpy(new_key+prefix_len, hash_key->arKey.s, hash_key->nKeyLength); + php_prefix_varname(&new_key, prefix, hash_key->arKey, hash_key->nKeyLength, hash_key->type TSRMLS_CC); } else { - new_key_len = spprintf(&new_key, 0, "%s%ld", prefix, hash_key->h); + 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); + zval_dtor(&num); } - zend_delete_global_variable(new_key, new_key_len-1 TSRMLS_CC); - ZEND_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), new_key, new_key_len, *var, (*var)->refcount+1, 0); + 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); - efree(new_key); + zval_dtor(&new_key); return 0; } @@ -6260,58 +6259,37 @@ static int copy_request_variable(void *p Import GET/POST/Cookie variables into the global scope */ PHP_FUNCTION(import_request_variables) { - zval **z_types, **z_prefix; - char *types, *prefix; - uint prefix_len; + char *types; + int types_len; + zval *prefix = NULL; char *p; - switch (ZEND_NUM_ARGS()) { - - case 1: - if (zend_get_parameters_ex(1, &z_types) == FAILURE) { - RETURN_FALSE; - } - prefix = ""; - prefix_len = 0; - break; - - case 2: - if (zend_get_parameters_ex(2, &z_types, &z_prefix) == FAILURE) { - RETURN_FALSE; - } - convert_to_string_ex(z_prefix); - prefix = Z_STRVAL_PP(z_prefix); - prefix_len = Z_STRLEN_PP(z_prefix); - break; - - default: - ZEND_WRONG_PARAM_COUNT(); + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s&|z/", &types, &types_len, UG(ascii_conv), &prefix) == FAILURE) { + return; } - if (prefix_len == 0) { + convert_to_text(prefix); + if (Z_UNILEN_P(prefix) == 0) { php_error_docref(NULL TSRMLS_CC, E_NOTICE, "No prefix specified - possible security hazard"); } - convert_to_string_ex(z_types); - types = Z_STRVAL_PP(z_types); - for (p = types; p && *p; p++) { switch (*p) { case 'g': case 'G': - zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len); + zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]), (apply_func_args_t) copy_request_variable, 1, prefix); break; case 'p': case 'P': - zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len); - zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_FILES]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len); + zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]), (apply_func_args_t) copy_request_variable, 1, prefix); + zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_FILES]), (apply_func_args_t) copy_request_variable, 1, prefix); break; case 'c': case 'C': - zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]), (apply_func_args_t) copy_request_variable, 2, prefix, prefix_len); + zend_hash_apply_with_arguments(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]), (apply_func_args_t) copy_request_variable, 1, prefix); break; } } Index: ext/standard/basic_functions.h =================================================================== RCS file: /repository/php-src/ext/standard/basic_functions.h,v retrieving revision 1.151 diff -p -u -r1.151 basic_functions.h --- ext/standard/basic_functions.h 14 Nov 2006 14:41:09 -0000 1.151 +++ ext/standard/basic_functions.h 21 Nov 2006 21:34:06 -0000 @@ -139,6 +139,7 @@ PHP_RSHUTDOWN_FUNCTION(user_filters); 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); #if SIZEOF_INT == 4 /* Most 32-bit and 64-bit systems have 32-bit ints */ --Apple-Mail-1--992351701--