From 8b95b33a9d114d2f9f3852c289722c8393d10fd8 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Tue, 18 Apr 2023 10:59:25 +0900 Subject: [rubygems/rubygems] Bundler::YAMLSerializer.load couldn't raise error when invalid yaml was provided https://github.com/rubygems/rubygems/commit/cfcfde04c7 --- lib/rubygems/config_file.rb | 61 +++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 33 deletions(-) (limited to 'lib/rubygems/config_file.rb') 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 -- cgit v1.2.3