From ab0b6d9c3daf7ff1ce4b3847244c775ffc961ac4 Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Tue, 8 Feb 2022 23:37:27 +0100 Subject: [PATCH] Feature test for issue #606 and disable the optimization if the bug is present --- lib/i18n/backend/base.rb | 18 ++++++++++++------ lib/i18n/backend/test_issue_606.yml | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 lib/i18n/backend/test_issue_606.yml diff --git a/lib/i18n/backend/base.rb b/lib/i18n/backend/base.rb index 77e832c0..2629884e 100644 --- a/lib/i18n/backend/base.rb +++ b/lib/i18n/backend/base.rb @@ -242,15 +242,21 @@ def load_rb(filename) # Loads a YAML translations file. The data must have locales as # toplevel keys. - def load_yml(filename) - begin - if YAML.respond_to?(:unsafe_load_file) # Psych 4.0 way + if YAML.respond_to?(:unsafe_load_file) && YAML.unsafe_load_file(File.expand_path("test_issue_606.yml", __dir__), symbolize_names: true).keys.first.encoding == Encoding::UTF_8 + def load_yml(filename) + begin [YAML.unsafe_load_file(filename, symbolize_names: true, freeze: true), true] - else + rescue TypeError, ScriptError, StandardError => e + raise InvalidLocaleData.new(filename, e.inspect) + end + end + else + def load_yml(filename) + begin [YAML.load_file(filename), false] + rescue TypeError, ScriptError, StandardError => e + raise InvalidLocaleData.new(filename, e.inspect) end - rescue TypeError, ScriptError, StandardError => e - raise InvalidLocaleData.new(filename, e.inspect) end end alias_method :load_yaml, :load_yml diff --git a/lib/i18n/backend/test_issue_606.yml b/lib/i18n/backend/test_issue_606.yml new file mode 100644 index 00000000..7c41acb5 --- /dev/null +++ b/lib/i18n/backend/test_issue_606.yml @@ -0,0 +1 @@ +√: ~