summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/cgi/core.rb11
-rw-r--r--test/cgi/test_cgi_core.rb2
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',