diff options
author | foobar <sniper@php.net> | 2001-04-06 02:09:43 +0000 |
---|---|---|
committer | foobar <sniper@php.net> | 2001-04-06 02:09:43 +0000 |
commit | 0cae755c9b0ab479f68511b1f9c48dca3b05c2dd (patch) | |
tree | 95dc5aad04e3bf759b1c6fbf2b05f56f542f4268 | |
parent | d73efa9300007af05ef7a5196d240132cfd22891 (diff) | |
download | php-git-0cae755c9b0ab479f68511b1f9c48dca3b05c2dd.tar.gz |
MFH
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | ext/standard/url_scanner.c | 6 | ||||
-rw-r--r-- | ext/standard/url_scanner_ex.c | 8 | ||||
-rw-r--r-- | ext/standard/url_scanner_ex.re | 4 | ||||
-rw-r--r-- | main/main.c | 4 | ||||
-rw-r--r-- | main/php_globals.h | 8 | ||||
-rw-r--r-- | main/php_variables.c | 27 | ||||
-rw-r--r-- | php.ini-dist | 7 | ||||
-rw-r--r-- | php.ini-optimized | 10 | ||||
-rw-r--r-- | php.ini-recommended | 10 |
10 files changed, 66 insertions, 23 deletions
@@ -2,7 +2,10 @@ PHP 4.0 NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 200?, Version 4.0.5 -- New FastCGI server module. (Ben Mansell) +- Added new php.ini directive: arg_separator.input which is used to tell + PHP which characters are considered as argument separators in URLs. + Renamed php.ini directive: arg_separator -> arg_separator.output (Jani) +- Added FastCGI SAPI module. (Ben Mansell) - Added array_reduce(), which allows iterative reduction of an array to a single value via a callback function. (Andrei) - The imageloadfont function of the gd extension should be not platform diff --git a/ext/standard/url_scanner.c b/ext/standard/url_scanner.c index b93741d52f..aacfcff8e8 100644 --- a/ext/standard/url_scanner.c +++ b/ext/standard/url_scanner.c @@ -67,12 +67,12 @@ static char *url_attr_addon(const char *tag,const char *attr,const char *val,con if(flag) { if(!strstr(val,buf)&&!strchr(val,':')) { - char *result = (char *)emalloc(strlen(buf)+strlen(PG(arg_separator))+1); + char *result = (char *)emalloc(strlen(buf)+strlen(PG(arg_separator).output)+1); int n; if(strchr(val,'?')) { - strcpy(result,PG(arg_separator)); - n=strlen(PG(arg_separator)); + strcpy(result,PG(arg_separator).output); + n=strlen(PG(arg_separator).output); } else { *result='?'; n=1; diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c index 9ea31a0c70..562e314af5 100644 --- a/ext/standard/url_scanner_ex.c +++ b/ext/standard/url_scanner_ex.c @@ -1,5 +1,5 @@ -/* Generated by re2c 0.5 on Tue Jan 9 17:13:20 2001 */ -#line 1 "/home/sas/src/php4/ext/standard/url_scanner_ex.re" +/* Generated by re2c 0.5 on Wed Apr 4 19:29:46 2001 */ +#line 1 "/usr/src/web/php/php4/ext/standard/url_scanner_ex.re" /* +----------------------------------------------------------------------+ | PHP version 4.0 | @@ -140,7 +140,7 @@ static inline void tag_arg(url_adapt_state_ex_t *ctx, char quote PLS_DC) smart_str_appendc(&ctx->result, quote); if (f) { - append_modified_url(&ctx->val, &ctx->result, &ctx->q_name, &ctx->q_value, PG(arg_separator)); + append_modified_url(&ctx->val, &ctx->result, &ctx->q_name, &ctx->q_value, PG(arg_separator).output); } else { smart_str_append(&ctx->result, &ctx->val); } @@ -670,7 +670,7 @@ char *url_adapt_single_url(const char *url, size_t urllen, const char *name, con smart_str_sets(&sname, name); smart_str_sets(&sval, value); - append_modified_url(&surl, &buf, &sname, &sval, PG(arg_separator)); + append_modified_url(&surl, &buf, &sname, &sval, PG(arg_separator).output); smart_str_0(&buf); if (newlen) *newlen = buf.len; diff --git a/ext/standard/url_scanner_ex.re b/ext/standard/url_scanner_ex.re index 5a8fefd815..681f08c2c0 100644 --- a/ext/standard/url_scanner_ex.re +++ b/ext/standard/url_scanner_ex.re @@ -138,7 +138,7 @@ static inline void tag_arg(url_adapt_state_ex_t *ctx, char quote PLS_DC) smart_str_appendc(&ctx->result, quote); if (f) { - append_modified_url(&ctx->val, &ctx->result, &ctx->q_name, &ctx->q_value, PG(arg_separator)); + append_modified_url(&ctx->val, &ctx->result, &ctx->q_name, &ctx->q_value, PG(arg_separator).output); } else { smart_str_append(&ctx->result, &ctx->val); } @@ -313,7 +313,7 @@ char *url_adapt_single_url(const char *url, size_t urllen, const char *name, con smart_str_sets(&sname, name); smart_str_sets(&sval, value); - append_modified_url(&surl, &buf, &sname, &sval, PG(arg_separator)); + append_modified_url(&surl, &buf, &sname, &sval, PG(arg_separator).output); smart_str_0(&buf); if (newlen) *newlen = buf.len; diff --git a/main/main.c b/main/main.c index 1f6d8a7f73..fd3e61c27d 100644 --- a/main/main.c +++ b/main/main.c @@ -209,7 +209,9 @@ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN("track_errors", "0", PHP_INI_ALL, OnUpdateBool, track_errors, php_core_globals, core_globals) STD_PHP_INI_BOOLEAN("y2k_compliance", "0", PHP_INI_ALL, OnUpdateBool, y2k_compliance, php_core_globals, core_globals) - STD_PHP_INI_ENTRY("arg_separator", "&", PHP_INI_ALL, OnUpdateStringUnempty, arg_separator, php_core_globals, core_globals) + STD_PHP_INI_ENTRY("arg_separator.output", "&", PHP_INI_ALL, OnUpdateStringUnempty, arg_separator.output, php_core_globals, core_globals) + STD_PHP_INI_ENTRY("arg_separator.input", "&", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateStringUnempty, arg_separator.input, php_core_globals, core_globals) + STD_PHP_INI_ENTRY("auto_append_file", NULL, PHP_INI_ALL, OnUpdateString, auto_append_file, php_core_globals, core_globals) STD_PHP_INI_ENTRY("auto_prepend_file", NULL, PHP_INI_ALL, OnUpdateString, auto_prepend_file, php_core_globals, core_globals) STD_PHP_INI_ENTRY("doc_root", NULL, PHP_INI_SYSTEM, OnUpdateStringUnempty, doc_root, php_core_globals, core_globals) diff --git a/main/php_globals.h b/main/php_globals.h index 593f37498c..57b9da2a9b 100644 --- a/main/php_globals.h +++ b/main/php_globals.h @@ -52,6 +52,11 @@ extern ZEND_API struct _php_core_globals core_globals; struct _php_tick_function_entry; +typedef struct _arg_separators { + char *output; + char *input; +} arg_separators; + struct _php_core_globals { zend_bool magic_quotes_gpc; zend_bool magic_quotes_runtime; @@ -93,7 +98,8 @@ struct _php_core_globals { char *auto_prepend_file; char *auto_append_file; - char *arg_separator; + arg_separators arg_separator; + char *gpc_order; char *variables_order; diff --git a/main/php_variables.c b/main/php_variables.c index 298e56ec40..0ac03c1c83 100644 --- a/main/php_variables.c +++ b/main/php_variables.c @@ -16,7 +16,7 @@ | Zeev Suraski <zeev@zend.com> | +----------------------------------------------------------------------+ */ -/* $Id: */ +/* $Id$ */ #include <stdio.h> #include "php.h" @@ -217,7 +217,7 @@ SAPI_POST_HANDLER_FUNC(php_std_post_handler) void php_treat_data(int arg, char *str, zval* destArray ELS_DC PLS_DC SLS_DC) { - char *res = NULL, *var, *val; + char *res = NULL, *var, *val, *separator=NULL; const char *c_var; pval *array_ptr; int free_buffer=0; @@ -252,7 +252,7 @@ void php_treat_data(int arg, char *str, zval* destArray ELS_DC PLS_DC SLS_DC) return; } - if (arg == PARSE_GET) { /* GET data */ + if (arg == PARSE_GET) { /* GET data */ c_var = SG(request_info).query_string; if (c_var && *c_var) { res = (char *) estrdup(c_var); @@ -277,8 +277,18 @@ void php_treat_data(int arg, char *str, zval* destArray ELS_DC PLS_DC SLS_DC) return; } - var = php_strtok_r(res, ";&", &strtok_buf); - + switch (arg) { + case PARSE_GET: + case PARSE_STRING: + separator = (char *) estrdup(PG(arg_separator).input); + break; + case PARSE_COOKIE: + separator = ";\0"; + break; + } + + var = php_strtok_r(res, separator, &strtok_buf); + while (var) { val = strchr(var, '='); if (val) { /* have a value */ @@ -289,8 +299,13 @@ void php_treat_data(int arg, char *str, zval* destArray ELS_DC PLS_DC SLS_DC) val_len = php_url_decode(val, strlen(val)); php_register_variable_safe(var, val, val_len, array_ptr ELS_CC PLS_CC); } - var = php_strtok_r(NULL, ";&", &strtok_buf); + var = php_strtok_r(NULL, separator, &strtok_buf); } + + if(arg != PARSE_COOKIE) { + efree(separator); + } + if (free_buffer) { efree(res); } diff --git a/php.ini-dist b/php.ini-dist index 43cd18aa7a..0aa5097ef8 100644 --- a/php.ini-dist +++ b/php.ini-dist @@ -243,7 +243,12 @@ warn_plus_overloading = Off ; The separator used in PHP generated URLs to separate arguments. ; Default is "&". -;arg_separator = "&" +;arg_separator.output = "&" + +; List of separator(s) used by PHP to parse input URLs into variables. +; Default is "&". +; NOTE: Every character in this directive is considered as separator! +;arg_separator.input = ";&" ; This directive describes the order in which PHP registers GET, POST, Cookie, ; Environment and Built-in variables (G, P, C, E & S respectively, often diff --git a/php.ini-optimized b/php.ini-optimized index 3e2cc697db..86e7745cc8 100644 --- a/php.ini-optimized +++ b/php.ini-optimized @@ -182,8 +182,14 @@ warn_plus_overloading = Off ; warn if the + operator is used with strings ;;;;;;;;;;;;;;;;; ; Data Handling ; ;;;;;;;;;;;;;;;;; -;arg_separator = "&" ; The separator used in PHP generated URLs to separate arguments. - ; Default is "&". + +;arg_separator.output = "&" ; The separator used in PHP generated URLs to separate arguments. + ; Default is "&". + +;arg_separator.input = ";&" ; List of separator(s) used by PHP to parse input URLs into variables. + ; Default is "&". + ; NOTE: Every character in this directive is considered as separator! + variables_order = "GPCS" ; This directive describes the order in which PHP registers ; GET, POST, Cookie, Environment and Built-in variables (G, P, ; C, E & S respectively, often referred to as EGPCS or GPC). diff --git a/php.ini-recommended b/php.ini-recommended index 3e2cc697db..86e7745cc8 100644 --- a/php.ini-recommended +++ b/php.ini-recommended @@ -182,8 +182,14 @@ warn_plus_overloading = Off ; warn if the + operator is used with strings ;;;;;;;;;;;;;;;;; ; Data Handling ; ;;;;;;;;;;;;;;;;; -;arg_separator = "&" ; The separator used in PHP generated URLs to separate arguments. - ; Default is "&". + +;arg_separator.output = "&" ; The separator used in PHP generated URLs to separate arguments. + ; Default is "&". + +;arg_separator.input = ";&" ; List of separator(s) used by PHP to parse input URLs into variables. + ; Default is "&". + ; NOTE: Every character in this directive is considered as separator! + variables_order = "GPCS" ; This directive describes the order in which PHP registers ; GET, POST, Cookie, Environment and Built-in variables (G, P, ; C, E & S respectively, often referred to as EGPCS or GPC). |