1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Don't wrap parameters if key already exists

We shouldn't perform parameter wrapping if it would overwrite one of the
parameters sent with the request, as that would interfere with reading
the parameter directly from the top level `params` hash.

The current implementation has logic for this case, but it doesn't
handle `nil`/`false` values, which means these parameters:

    { "user" => nil }

are transformed into this `params` hash:

    { "user" => { "user" => nil } }

and `params["user"]` no longer returns the original parameter value.
This commit is contained in:
Eugene Kenny 2017-06-24 00:48:34 +01:00
parent 2477e1b5aa
commit b3966080cc
2 changed files with 9 additions and 1 deletions

View file

@ -282,7 +282,7 @@ module ActionController
return false unless request.has_content_type?
ref = request.content_mime_type.ref
_wrapper_formats.include?(ref) && _wrapper_key && !request.request_parameters[_wrapper_key]
_wrapper_formats.include?(ref) && _wrapper_key && !request.request_parameters.key?(_wrapper_key)
end
end
end

View file

@ -170,6 +170,14 @@ class ParamsWrapperTest < ActionController::TestCase
end
end
def test_no_double_wrap_if_key_exists_and_value_is_nil
with_default_wrapper_options do
@request.env["CONTENT_TYPE"] = "application/json"
post :parse, params: { "user" => nil }
assert_parameters("user" => nil)
end
end
def test_nested_params
with_default_wrapper_options do
@request.env["CONTENT_TYPE"] = "application/json"