Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Update bundled rack to fix more parameter parsing issues
  • Loading branch information
josh committed Feb 15, 2009
1 parent 0cb020b commit 238a6bb
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 12 deletions.
Expand Up @@ -108,7 +108,7 @@ def GET
else
@env["rack.request.query_string"] = query_string
@env["rack.request.query_hash"] =
Utils.parse_query(query_string)
Utils.parse_nested_query(query_string)
end
end

Expand All @@ -129,7 +129,7 @@ def POST
form_vars.sub!(/\0\z/, '')

@env["rack.request.form_vars"] = form_vars
@env["rack.request.form_hash"] = Utils.parse_query(form_vars)
@env["rack.request.form_hash"] = Utils.parse_nested_query(form_vars)

begin
@env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind)
Expand Down
33 changes: 23 additions & 10 deletions actionpack/lib/action_controller/vendor/rack-1.0/rack/utils.rb
Expand Up @@ -29,19 +29,39 @@ def unescape(s)
# and ';' characters. You can also use this to parse
# cookies by changing the characters used in the second
# parameter (which defaults to '&;').

def parse_query(qs, d = '&;')
params = {}

(qs || '').split(/[#{d}] */n).each do |p|
k, v = unescape(p).split('=', 2)
normalize_params(params, k, v)

if cur = params[k]
if cur.class == Array
params[k] << v
else
params[k] = [cur, v]
end
else
params[k] = v
end
end

return params
end
module_function :parse_query

def parse_nested_query(qs, d = '&;')
params = {}

(qs || '').split(/[#{d}] */n).each do |p|
k, v = unescape(p).split('=', 2)
normalize_params(params, k, v)
end

return params
end
module_function :parse_nested_query

def normalize_params(params, name, v = nil)
name =~ %r([\[\]]*([^\[\]]+)\]*)
k = $1 || ''
Expand All @@ -50,14 +70,7 @@ def normalize_params(params, name, v = nil)
return if k.empty?

if after == ""
cur = params[k]
if cur.is_a?(Array)
params[k] << v
elsif cur && name == $1
params[k] = [cur, v]
else
params[k] = v
end
params[k] = v
elsif after == "[]"
params[k] ||= []
raise TypeError unless params[k].is_a?(Array)
Expand Down

0 comments on commit 238a6bb

Please sign in to comment.