diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2006-12-09 14:14:29 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2006-12-09 14:14:29 +0000 |
commit | 94e3f478d75f18fb8bec2527bc7a56fe8dce3b6d (patch) | |
tree | a5b523035da5840f830e862a8112ae9787a4afca | |
parent | 847741cb08f79676c80e7fffadc108854683f343 (diff) | |
download | php-git-94e3f478d75f18fb8bec2527bc7a56fe8dce3b6d.tar.gz |
Fixed handling of multiple cookies with the same name.
Added support for cookies into run-tests.php
-rw-r--r-- | ext/filter/filter.c | 10 | ||||
-rw-r--r-- | ext/filter/tests/041.phpt | 32 | ||||
-rwxr-xr-x | run-tests.php | 12 |
3 files changed, 52 insertions, 2 deletions
diff --git a/ext/filter/filter.c b/ext/filter/filter.c index b2107aaa00..6f692787b9 100644 --- a/ext/filter/filter.c +++ b/ext/filter/filter.c @@ -370,6 +370,16 @@ static unsigned int php_sapi_filter(int arg, char *var, char **val, unsigned int break; } + /* + * According to rfc2965, more specific paths are listed above the less specific ones. + * If we encounter a duplicate cookie name, we should skip it, since it is not possible + * to have the same (plain text) cookie name for the same path and we should not overwrite + * more specific cookies with the less specific ones. + */ + if (arg == PARSE_COOKIE && orig_array_ptr && zend_symtable_exists(Z_ARRVAL_P(orig_array_ptr), var, strlen(var)+1)) { + return 0; + } + if (array_ptr) { /* Make a copy of the variable name, as php_register_variable_ex seems to * modify it */ diff --git a/ext/filter/tests/041.phpt b/ext/filter/tests/041.phpt new file mode 100644 index 0000000000..e313cb30df --- /dev/null +++ b/ext/filter/tests/041.phpt @@ -0,0 +1,32 @@ +--TEST-- +COOKIE multiple cookie test +--INI-- +filter.default=stripped +filter.default_flags=0 +--COOKIE-- +abc=dir; def=true; abc=root; xyz="foo bar"; +--FILE-- +<?php +var_dump($_COOKIE); +var_dump(filter_has_var(INPUT_COOKIE, "abc")); +var_dump(filter_input(INPUT_COOKIE, "abc")); +var_dump(filter_input(INPUT_COOKIE, "def")); +var_dump(filter_input(INPUT_COOKIE, "xyz")); +var_dump(filter_has_var(INPUT_COOKIE, "bogus")); +var_dump(filter_input(INPUT_COOKIE, "xyz", FILTER_SANITIZE_SPECIAL_CHARS)); +?> +--EXPECT-- +array(3) { + ["abc"]=> + string(3) "dir" + ["def"]=> + string(4) "true" + ["xyz"]=> + string(17) ""foo bar"" +} +bool(true) +string(3) "dir" +string(4) "true" +string(9) ""foo bar"" +bool(false) +string(17) ""foo bar"" diff --git a/run-tests.php b/run-tests.php index 74b51b8dfe..9be3bece53 100755 --- a/run-tests.php +++ b/run-tests.php @@ -950,13 +950,14 @@ TEST $file 'TEST' => '', 'SKIPIF' => '', 'GET' => '', + 'COOKIE' => '', 'POST_RAW' => '', 'POST' => '', 'UPLOAD' => '', 'ARGS' => '', ); - $fp = @fopen($file, "rt") or error("Cannot open test file: $file"); + $fp = fopen($file, "rt") or error("Cannot open test file: $file"); $borked = false; $bork_info = ''; @@ -1039,7 +1040,7 @@ TEST $file $tested = trim($section_text['TEST']); /* For GET/POST tests, check if cgi sapi is available and if it is, use it. */ - if (!empty($section_text['GET']) || !empty($section_text['POST']) || !empty($section_text['POST_RAW'])) { + if (!empty($section_text['GET']) || !empty($section_text['POST']) || !empty($section_text['POST_RAW']) || !empty($section_text['COOKIE'])) { if (isset($php_cgi)) { $old_php = $php; $php = $php_cgi .' -C '; @@ -1288,6 +1289,12 @@ TEST $file $env['PATH_TRANSLATED'] = $test_file; $env['SCRIPT_FILENAME'] = $test_file; + if (array_key_exists('COOKIE', $section_text)) { + $env['HTTP_COOKIE'] = trim($section_text['COOKIE']); + } else { + $env['HTTP_COOKIE'] = ''; + } + $args = $section_text['ARGS'] ? ' -- '.$section_text['ARGS'] : ''; if (array_key_exists('POST_RAW', $section_text) && !empty($section_text['POST_RAW'])) { @@ -1347,6 +1354,7 @@ QUERY_STRING = " . $env['QUERY_STRING'] . " REDIRECT_STATUS = " . $env['REDIRECT_STATUS'] . " REQUEST_METHOD = " . $env['REQUEST_METHOD'] . " SCRIPT_FILENAME = " . $env['SCRIPT_FILENAME'] . " +HTTP_COOKIE = " . $env['HTTP_COOKIE'] . " COMMAND $cmd "; |