Skip to content

Commit 9b7e92a

Browse files
Precompile config.filter_parameters in place
Applications may try to modify `config.filter_parameters` after `Rails::Application#env_config` has already been memoized. For example, in the `development` environment, models with encrypted attributes will append filters when the model is (re)loaded. Prior to this commit, if `config.precompile_filter_parameters` was enabled, such changes would not be reflected in `env_config["action_dispatch.parameter_filter"]`. This commit ensures that `env_config["action_dispatch.parameter_filter"]` is the `config.filter_parameters` array itself, regardless of whether `config.precompile_filter_parameters` is enabled.
1 parent bc34f35 commit 9b7e92a

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

railties/lib/rails/application.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -675,10 +675,11 @@ def coerce_same_site_protection(protection)
675675

676676
def filter_parameters
677677
if config.precompile_filter_parameters
678-
ActiveSupport::ParameterFilter.precompile_filters(config.filter_parameters)
679-
else
680-
config.filter_parameters
678+
config.filter_parameters.replace(
679+
ActiveSupport::ParameterFilter.precompile_filters(config.filter_parameters)
680+
)
681681
end
682+
config.filter_parameters
682683
end
683684
end
684685
end

railties/test/application/configuration_test.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,21 @@ class Comment < ActiveRecord::Base
557557
assert_equal filters, Rails.application.env_config["action_dispatch.parameter_filter"]
558558
end
559559

560+
test "filter_parameters reflects changes to config.filter_parameters after being precompiled" do
561+
add_to_config <<~RUBY
562+
config.filter_parameters += [/foo/, :bar]
563+
config.precompile_filter_parameters = true
564+
RUBY
565+
566+
app "development"
567+
568+
assert_not_empty Rails.application.env_config["action_dispatch.parameter_filter"]
569+
570+
Rails.application.config.filter_parameters << "baz.qux"
571+
572+
assert_includes Rails.application.env_config["action_dispatch.parameter_filter"], "baz.qux"
573+
end
574+
560575
test "config.precompile_filter_parameters is true by default for new apps" do
561576
app "development"
562577

0 commit comments

Comments
 (0)