summary refs log tree commit
diff options
context:
space:
mode:
authorScytrin dai Kinthra <scytrin@gmail.com>2009-12-02 19:54:36 -0800
committerScytrin dai Kinthra <scytrin@gmail.com>2009-12-02 19:54:36 -0800
commitc64d7520e5cd48ec51029a96f1dfe684b5d30370 (patch)
tree9dbc6647ba08512933708fcc3a986b4101daa638
parent35b562e3df70de7f0b494fd1c7d5af653caa2abb (diff)
parentfb4f2b5fe26a0e3821ac0f6361a3885bd88b42ca (diff)
downloadrack-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.rb7
-rw-r--r--test/spec_rack_utils.rb7
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"