Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/gitlab_settings/settings.rb10
-rw-r--r--spec/lib/gitlab_settings/settings_spec.rb9
2 files changed, 19 insertions, 0 deletions
diff --git a/lib/gitlab_settings/settings.rb b/lib/gitlab_settings/settings.rb
index ae2ed4eac05..dc077fdef81 100644
--- a/lib/gitlab_settings/settings.rb
+++ b/lib/gitlab_settings/settings.rb
@@ -8,6 +8,16 @@ module GitlabSettings
raise(ArgumentError, 'config source is required') if source.blank?
raise(ArgumentError, 'config section is required') if section.blank?
+ # Rails will set the default encoding to UTF-8
+ # (https://github.com/rails/rails/blob/v6.1.7.2/railties/lib/rails.rb#L21C1-L24),
+ # but it's possible this class is used before `require 'rails'` is
+ # called, as in the case of `sidekiq-cluster`. Ensure the
+ # configuration file is parsed as UTF-8, or
+ # ActiveSupport::ConfigurationFile.parse will blow up if the
+ # configuration file contains UTF-8 characters.
+ Encoding.default_external = Encoding::UTF_8
+ Encoding.default_internal = Encoding::UTF_8
+
@source = source
@section = section
@loaded = false
diff --git a/spec/lib/gitlab_settings/settings_spec.rb b/spec/lib/gitlab_settings/settings_spec.rb
index 161c26dbb9f..4422bea4a63 100644
--- a/spec/lib/gitlab_settings/settings_spec.rb
+++ b/spec/lib/gitlab_settings/settings_spec.rb
@@ -31,6 +31,15 @@ RSpec.describe GitlabSettings::Settings, :aggregate_failures, feature_category:
expect { described_class.new(source, '') }
.to raise_error(ArgumentError, 'config section is required')
end
+
+ it 'sets encodings' do
+ expect(Encoding).to receive(:default_external=).with(Encoding::UTF_8).and_call_original
+ expect(Encoding).to receive(:default_internal=).with(Encoding::UTF_8).and_call_original
+
+ File.write(source, { section1: { config1: { value1: 2 } } }.to_yaml)
+
+ described_class.new(source, 'section1')
+ end
end
describe '#reload!' do