diff options
author | Scytrin dai Kinthra <scytrin@gmail.com> | 2009-12-02 19:54:36 -0800 |
---|---|---|
committer | Scytrin dai Kinthra <scytrin@gmail.com> | 2009-12-02 19:54:36 -0800 |
commit | c64d7520e5cd48ec51029a96f1dfe684b5d30370 (patch) | |
tree | 9dbc6647ba08512933708fcc3a986b4101daa638 | |
parent | 35b562e3df70de7f0b494fd1c7d5af653caa2abb (diff) | |
parent | fb4f2b5fe26a0e3821ac0f6361a3885bd88b42ca (diff) | |
download | rack-c64d7520e5cd48ec51029a96f1dfe684b5d30370.tar.gz |
Merge branch 'quoted-string-cookies'
* quoted-string-cookies: Test added to check to ensure that quoted values are properly parsed
-rw-r--r-- | lib/rack/utils.rb | 7 | ||||
-rw-r--r-- | test/spec_rack_utils.rb | 7 |
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/rack/utils.rb b/lib/rack/utils.rb index 884e6045..05c7734f 100644 --- a/lib/rack/utils.rb +++ b/lib/rack/utils.rb @@ -38,7 +38,9 @@ module Rack (qs || '').split(d ? /[#{d}] */n : DEFAULT_SEP).each do |p| k, v = p.split('=', 2).map { |x| unescape(x) } - + if v =~ /^("|')(.*)\1$/ + v = $2.gsub('\\'+$1, $1) + end if cur = params[k] if cur.class == Array params[k] << v @@ -67,6 +69,9 @@ module Rack module_function :parse_nested_query def normalize_params(params, name, v = nil) + if v and v =~ /^("|')(.*)\1$/ + v = $2.gsub('\\'+$1, $1) + end name =~ %r(\A[\[\]]*([^\[\]]+)\]*) k = $1 || '' after = $' || '' diff --git a/test/spec_rack_utils.rb b/test/spec_rack_utils.rb index 52333773..dca4edca 100644 --- a/test/spec_rack_utils.rb +++ b/test/spec_rack_utils.rb @@ -30,7 +30,10 @@ context "Rack::Utils" do end specify "should parse query strings correctly" do - Rack::Utils.parse_query("foo=bar").should.equal "foo" => "bar" + Rack::Utils.parse_query("foo=bar"). + should.equal "foo" => "bar" + Rack::Utils.parse_query("foo=\"bar\""). + should.equal "foo" => "bar" Rack::Utils.parse_query("foo=bar&foo=quux"). should.equal "foo" => ["bar", "quux"] Rack::Utils.parse_query("foo=1&bar=2"). @@ -47,6 +50,8 @@ context "Rack::Utils" do should.equal "foo" => "" Rack::Utils.parse_nested_query("foo=bar"). should.equal "foo" => "bar" + Rack::Utils.parse_nested_query("foo=\"bar\""). + should.equal "foo" => "bar" Rack::Utils.parse_nested_query("foo=bar&foo=quux"). should.equal "foo" => "quux" |