summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfoobar <sniper@php.net>2001-04-06 02:09:43 +0000
committerfoobar <sniper@php.net>2001-04-06 02:09:43 +0000
commit0cae755c9b0ab479f68511b1f9c48dca3b05c2dd (patch)
tree95dc5aad04e3bf759b1c6fbf2b05f56f542f4268
parentd73efa9300007af05ef7a5196d240132cfd22891 (diff)
downloadphp-git-0cae755c9b0ab479f68511b1f9c48dca3b05c2dd.tar.gz
MFH
-rw-r--r--NEWS5
-rw-r--r--ext/standard/url_scanner.c6
-rw-r--r--ext/standard/url_scanner_ex.c8
-rw-r--r--ext/standard/url_scanner_ex.re4
-rw-r--r--main/main.c4
-rw-r--r--main/php_globals.h8
-rw-r--r--main/php_variables.c27
-rw-r--r--php.ini-dist7
-rw-r--r--php.ini-optimized10
-rw-r--r--php.ini-recommended10
10 files changed, 66 insertions, 23 deletions
diff --git a/NEWS b/NEWS
index 4d1452053f..0f9c2ff3ec 100644
--- a/NEWS
+++ b/NEWS
@@ -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 = "&amp;"
+;arg_separator.output = "&amp;"
+
+; 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 = "&amp;" ; The separator used in PHP generated URLs to separate arguments.
- ; Default is "&".
+
+;arg_separator.output = "&amp;" ; 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 = "&amp;" ; The separator used in PHP generated URLs to separate arguments.
- ; Default is "&".
+
+;arg_separator.output = "&amp;" ; 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).