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

Bugfix: ActiveSupport::EncryptedConfiguration reading of comment-only encrypted files (#34014)

* Fix reading comment only encrypted files

When a encrypted file contains only comments then reading that files raises an error:

    NoMethodError: undefined method `deep_symbolize_keys' for false:FalseClass
        activesupport/lib/active_support/encrypted_configuration.rb:33:in `config'
        test/encrypted_configuration_test.rb:52:in `block in <class:EncryptedConfigurationTest>'

This happens because the previous implementation returned a `{}` fallback for blank YAML strings. But it did not handle YAML strings that are present but still do not contain any _usefull_ YAML - like the file created by `Rails::Generators::EncryptedFileGenerator` which looks like this:

    # aws:
    #   access_key_id: 123
    #   secret_access_key: 345

* Fix coding style violation

* Add backwardscompatible with Psych versions that were shipped with Ruby <2.5

* Do not rely on railties for Active Support test

* Simplify error handling

* Improve test naming

* Simplify file creation in test
This commit is contained in:
Martin Spickermann 2018-10-05 01:06:33 +02:00 committed by Yuji Yaginuma
parent c37247e187
commit bd10796419
2 changed files with 7 additions and 1 deletions

View file

@ -39,7 +39,7 @@ module ActiveSupport
end end
def deserialize(config) def deserialize(config)
config.present? ? YAML.load(config, content_path) : {} YAML.load(config).presence || {}
end end
end end
end end

View file

@ -42,6 +42,12 @@ class EncryptedConfigurationTest < ActiveSupport::TestCase
assert @credentials.something[:good] assert @credentials.something[:good]
end end
test "reading comment-only configuration" do
@credentials.write("# comment")
assert_equal @credentials.config, {}
end
test "change configuration by key file" do test "change configuration by key file" do
@credentials.write({ something: { good: true } }.to_yaml) @credentials.write({ something: { good: true } }.to_yaml)
@credentials.change do |config_file| @credentials.change do |config_file|