From fb4f2b5fe26a0e3821ac0f6361a3885bd88b42ca Mon Sep 17 00:00:00 2001 From: Scytrin dai Kinthra Date: Wed, 2 Dec 2009 19:32:56 -0800 Subject: [PATCH] Test added to check to ensure that quoted values are properly parsed Using a regular expression to identify quoted string values, could be optimized --- lib/rack/utils.rb | 7 ++++++- 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 884e60455..05c7734f5 100644 --- a/lib/rack/utils.rb +++ b/lib/rack/utils.rb @@ -38,7 +38,9 @@ def parse_query(qs, d = nil) (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 @@ def parse_nested_query(qs, d = nil) 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 523337731..dca4edca3 100644 --- a/test/spec_rack_utils.rb +++ b/test/spec_rack_utils.rb @@ -30,7 +30,10 @@ 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 @@ 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"