From 94e3f478d75f18fb8bec2527bc7a56fe8dce3b6d Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Sat, 9 Dec 2006 14:14:29 +0000 Subject: [PATCH] Fixed handling of multiple cookies with the same name. Added support for cookies into run-tests.php --- ext/filter/filter.c | 10 ++++++++++ ext/filter/tests/041.phpt | 32 ++++++++++++++++++++++++++++++++ run-tests.php | 12 ++++++++++-- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 ext/filter/tests/041.phpt diff --git a/ext/filter/filter.c b/ext/filter/filter.c index b2107aaa001..6f692787b99 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 00000000000..e313cb30df3 --- /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-- + +--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 74b51b8dfec..9be3bece53f 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 ";