make sure request parameters are accessible after rack throws an exception parsing the query string [#3030 state:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
This commit is contained in:
parent
933f745dcb
commit
3eff729079
|
@ -214,13 +214,13 @@ module ActionDispatch
|
||||||
|
|
||||||
# Override Rack's GET method to support indifferent access
|
# Override Rack's GET method to support indifferent access
|
||||||
def GET
|
def GET
|
||||||
@env["action_dispatch.request.query_parameters"] ||= normalize_parameters(super)
|
@env["action_dispatch.request.query_parameters"] ||= (normalize_parameters(super) || {})
|
||||||
end
|
end
|
||||||
alias :query_parameters :GET
|
alias :query_parameters :GET
|
||||||
|
|
||||||
# Override Rack's POST method to support indifferent access
|
# Override Rack's POST method to support indifferent access
|
||||||
def POST
|
def POST
|
||||||
@env["action_dispatch.request.request_parameters"] ||= normalize_parameters(super)
|
@env["action_dispatch.request.request_parameters"] ||= (normalize_parameters(super) || {})
|
||||||
end
|
end
|
||||||
alias :request_parameters :POST
|
alias :request_parameters :POST
|
||||||
|
|
||||||
|
|
|
@ -385,6 +385,18 @@ class RequestTest < ActiveSupport::TestCase
|
||||||
assert_equal({"bar" => 2}, request.query_parameters)
|
assert_equal({"bar" => 2}, request.query_parameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "parameters still accessible after rack parse error" do
|
||||||
|
mock_rack_env = { "QUERY_STRING" => "x[y]=1&x[y][][w]=2", "rack.input" => "foo" }
|
||||||
|
request = nil
|
||||||
|
begin
|
||||||
|
request = stub_request(mock_rack_env)
|
||||||
|
request.parameters
|
||||||
|
rescue TypeError => e
|
||||||
|
# rack will raise a TypeError when parsing this query string
|
||||||
|
end
|
||||||
|
assert_equal({}, request.parameters)
|
||||||
|
end
|
||||||
|
|
||||||
test "formats with accept header" do
|
test "formats with accept header" do
|
||||||
request = stub_request 'HTTP_ACCEPT' => 'text/html'
|
request = stub_request 'HTTP_ACCEPT' => 'text/html'
|
||||||
request.expects(:parameters).at_least_once.returns({})
|
request.expects(:parameters).at_least_once.returns({})
|
||||||
|
|
Loading…
Reference in New Issue