Skip to content

Commit fa8c61b

Browse files
authored
Merge pull request rails#43883 from rails/dup-converted-arrays
Dup arrays that get "converted"
2 parents 334dfef + 8159996 commit fa8c61b

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

actionpack/lib/action_controller/metal/strong_parameters.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -963,7 +963,7 @@ def convert_value_to_parameters(value)
963963
when Array
964964
return value if converted_arrays.member?(value)
965965
converted = value.map { |_| convert_value_to_parameters(_) }
966-
converted_arrays << converted
966+
converted_arrays << converted.dup
967967
converted
968968
when Hash
969969
self.class.new(value)

actionpack/test/controller/parameters/parameters_permit_test.rb

+13
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,19 @@ def walk_permitted(params)
253253
assert_not_predicate permitted[:users].last, :permitted?
254254
end
255255

256+
test "grow until set rehashes" do
257+
params = ActionController::Parameters.new(users: [{ id: 1 }])
258+
259+
permitted = params.permit(users: [:id])
260+
permitted[:users] << { injected: 1 }
261+
20.times { |i|
262+
list = ["foo#{i}"]
263+
permitted[:xx] = list
264+
assert_equal permitted[:xx], list
265+
}
266+
assert_not_predicate permitted[:users].last, :permitted?
267+
end
268+
256269
test "fetch doesn't raise ParameterMissing exception if there is a default" do
257270
assert_equal "monkey", @params.fetch(:foo, "monkey")
258271
assert_equal "monkey", @params.fetch(:foo) { "monkey" }

0 commit comments

Comments
 (0)