diff options
author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2023-04-18 10:59:25 +0900 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-04-19 06:56:22 +0000 |
commit | 8b95b33a9d114d2f9f3852c289722c8393d10fd8 (patch) | |
tree | 6ef2d963b5c87d2a2eb97b050a7faa81a345cfb7 /lib/rubygems/config_file.rb | |
parent | 92ab4e41dd6261d6f2fe04011508359544535164 (diff) | |
download | ruby-8b95b33a9d114d2f9f3852c289722c8393d10fd8.tar.gz |
[rubygems/rubygems] Bundler::YAMLSerializer.load couldn't raise error when invalid yaml was provided
https://github.com/rubygems/rubygems/commit/cfcfde04c7
Diffstat (limited to 'lib/rubygems/config_file.rb')
-rw-r--r-- | lib/rubygems/config_file.rb | 61 |
1 files changed, 28 insertions, 33 deletions
diff --git a/lib/rubygems/config_file.rb b/lib/rubygems/config_file.rb index 907d5d1199..a0d263fba7 100644 --- a/lib/rubygems/config_file.rb +++ b/lib/rubygems/config_file.rb @@ -521,51 +521,46 @@ if you believe they were disclosed to a third party. Bundler::YAMLSerializer.dump(content) end - def self.load_with_rubygems_config_hash(hash) + def self.load_with_rubygems_config_hash(yaml) require "bundler/yaml_serializer" - content = Bundler::YAMLSerializer.load(hash) - - if content.is_a? Hash - content.transform_keys! do |k| - if k.match?(/\A:(.*)\Z/) - k[1..-1].to_sym - elsif k.include?("__") - if k.is_a?(Symbol) - k.to_s.gsub(/__/,".").gsub(%r{/\Z}, "").to_sym - else - k.dup.gsub(/__/,".").gsub(%r{/\Z}, "") - end + content = Bundler::YAMLSerializer.load(yaml) + + content.transform_keys! do |k| + if k.match?(/\A:(.*)\Z/) + k[1..-1].to_sym + elsif k.include?("__") + if k.is_a?(Symbol) + k.to_s.gsub(/__/,".").gsub(%r{/\Z}, "").to_sym else - k + k.dup.gsub(/__/,".").gsub(%r{/\Z}, "") end + else + k end + end - content.transform_values! do |v| - if v.is_a?(String) - if v.match?(/\A:(.*)\Z/) - v[1..-1].to_sym - elsif v.match?(/\A[+-]?\d+\Z/) - v.to_i - elsif v.match?(/\Atrue|false\Z/) - v == "true" - elsif v.empty? - nil - else - v - end - elsif v.is_a?(Hash) && v.empty? + content.transform_values! do |v| + if v.is_a?(String) + if v.match?(/\A:(.*)\Z/) + v[1..-1].to_sym + elsif v.match?(/\A[+-]?\d+\Z/) + v.to_i + elsif v.match?(/\Atrue|false\Z/) + v == "true" + elsif v.empty? nil else v end + elsif v.is_a?(Hash) && v.empty? + nil + else + v end - - content - else - warn "Failed to load #{filename} because it doesn't contain valid YAML hash" - {} end + + content end private |