summaryrefslogtreecommitdiff
path: root/lib/rubygems/config_file.rb
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2023-04-18 10:59:25 +0900
committergit <svn-admin@ruby-lang.org>2023-04-19 06:56:22 +0000
commit8b95b33a9d114d2f9f3852c289722c8393d10fd8 (patch)
tree6ef2d963b5c87d2a2eb97b050a7faa81a345cfb7 /lib/rubygems/config_file.rb
parent92ab4e41dd6261d6f2fe04011508359544535164 (diff)
[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.rb61
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