Skip to content
This repository was archived by the owner on Aug 17, 2017. It is now read-only.

Commit 62c0efb

Browse files
committed
converts hashes in arrays of unfiltered params to unpermitted params [closes #185, closes #159]
1 parent b53893b commit 62c0efb

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

lib/action_controller/parameters.rb

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,18 @@ def convert_value(value)
111111
private
112112

113113
def convert_hashes_to_parameters(key, value)
114-
if value.is_a?(Parameters) || !value.is_a?(Hash)
114+
converted = convert_value_to_parameters(value)
115+
self[key] = converted unless converted.equal?(value)
116+
converted
117+
end
118+
119+
def convert_value_to_parameters(value)
120+
if value.is_a?(Array)
121+
value.map { |_| convert_value_to_parameters(_) }
122+
elsif value.is_a?(Parameters) || !value.is_a?(Hash)
115123
value
116124
else
117-
# Convert to Parameters on first access
118-
self[key] = self.class.new(value)
125+
self.class.new(value)
119126
end
120127
end
121128

test/parameters_permit_test.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,4 +333,11 @@ def assert_filtered_out(params, key)
333333
assert_nil params[:properties]["1"]
334334
assert_equal "prop0", params[:properties]["0"]
335335
end
336+
337+
test 'hashes in array values get wrapped' do
338+
params = ActionController::Parameters.new(foo: [{}, {}])
339+
params[:foo].each do |hash|
340+
assert !hash.permitted?
341+
end
342+
end
336343
end

0 commit comments

Comments
 (0)