diff options
-rw-r--r-- | lib/cgi/core.rb | 11 | ||||
-rw-r--r-- | test/cgi/test_cgi_core.rb | 2 |
2 files changed, 7 insertions, 6 deletions
diff --git a/lib/cgi/core.rb b/lib/cgi/core.rb index 376ad01130..5b01866e8e 100644 --- a/lib/cgi/core.rb +++ b/lib/cgi/core.rb @@ -367,12 +367,13 @@ class CGI params = {} query.split(/[&;]/).each do |pairs| key, value = pairs.split('=',2).collect{|v| CGI::unescape(v) } - if key && value - params.has_key?(key) ? params[key].push(value) : params[key] = [value] - elsif key - params[key]=[] - end + + next unless key + + params[key] ||= [] + params[key].push(value) if value end + params.default=[].freeze params end diff --git a/test/cgi/test_cgi_core.rb b/test/cgi/test_cgi_core.rb index 23b8891576..0efba195cd 100644 --- a/test/cgi/test_cgi_core.rb +++ b/test/cgi/test_cgi_core.rb @@ -38,7 +38,7 @@ class CGICoreTest < Test::Unit::TestCase def test_cgi_core_params_GET @environ = { 'REQUEST_METHOD' => 'GET', - 'QUERY_STRING' => 'id=123&id=456&id=&str=%40h+%3D%7E+%2F%5E%24%2F', + 'QUERY_STRING' => 'id=123&id=456&id=&id&str=%40h+%3D%7E+%2F%5E%24%2F', 'HTTP_COOKIE' => '_session_id=12345; name1=val1&val2;', 'SERVER_SOFTWARE' => 'Apache 2.2.0', 'SERVER_PROTOCOL' => 'HTTP/1.1', |