From 39b9fb667b7bd53f7b904464d74d1b074aaa4765 Mon Sep 17 00:00:00 2001 From: Brandon Keepers Date: Sat, 13 Feb 2010 02:15:23 -0500 Subject: [PATCH] Fix filter_parameter_logging on Ruby 1.9 when params contains an array. Closes #2999 --- .../lib/action_dispatch/http/filter_parameters.rb | 37 +++++++++++--------- actionpack/test/dispatch/request_test.rb | 4 ++- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/actionpack/lib/action_dispatch/http/filter_parameters.rb b/actionpack/lib/action_dispatch/http/filter_parameters.rb index 1958e16..f3b690f 100644 --- a/actionpack/lib/action_dispatch/http/filter_parameters.rb +++ b/actionpack/lib/action_dispatch/http/filter_parameters.rb @@ -72,26 +72,29 @@ module ActionDispatch def process_parameter_filter(original_params) #:nodoc: return original_params.dup unless filtering_parameters? - filtered_params = {} regexps, blocks = compile_parameter_filter - - original_params.each do |key, value| - if regexps.find { |r| key =~ r } - value = '[FILTERED]' - elsif value.is_a?(Hash) - value = process_parameter_filter(value) - elsif value.is_a?(Array) - value = value.map { |i| process_parameter_filter(i) } - elsif blocks.present? - key = key.dup - value = value.dup if value.duplicable? - blocks.each { |b| b.call(key, value) } + + case original_params + when Hash + original_params.inject({}) do |filtered_params, (key, value)| + if regexps.find { |r| key =~ r } + value = '[FILTERED]' + elsif value.is_a?(Hash) || value.is_a?(Array) + value = process_parameter_filter(value) + elsif blocks.present? + key = key.dup + value = value.dup if value.duplicable? + blocks.each { |b| b.call(key, value) } + end + filtered_params[key] = value + + filtered_params end - - filtered_params[key] = value + when Array + original_params.map { |i| process_parameter_filter(i) } + else + original_params end - - filtered_params end end end diff --git a/actionpack/test/dispatch/request_test.rb b/actionpack/test/dispatch/request_test.rb index 2b5c193..cb8cbe7 100644 --- a/actionpack/test/dispatch/request_test.rb +++ b/actionpack/test/dispatch/request_test.rb @@ -462,7 +462,9 @@ class RequestTest < ActiveSupport::TestCase [{'foo'=>'bar', 'baz'=>'foo'},{'foo'=>'[FILTERED]', 'baz'=>'[FILTERED]'},%w'foo baz'], [{'bar'=>{'foo'=>'bar','bar'=>'foo'}},{'bar'=>{'foo'=>'[FILTERED]','bar'=>'foo'}},%w'fo'], [{'foo'=>{'foo'=>'bar','bar'=>'foo'}},{'foo'=>'[FILTERED]'},%w'f banana'], - [{'baz'=>[{'foo'=>'baz'}]}, {'baz'=>[{'foo'=>'[FILTERED]'}]}, [/foo/]]] + [{'baz'=>[{'foo'=>'baz'}]}, {'baz'=>[{'foo'=>'[FILTERED]'}]}, [/foo/]], + [{'foo' => 'bar', 'baz'=>["1", "2"]}, {'foo'=>'[FILTERED]', 'baz'=>["1", "2"]}, ['foo']], + ] test_hashes.each do |before_filter, after_filter, filter_words| request = stub_request('action_dispatch.parameter_filter' => filter_words) -- 1.6.5.4