Skip to content

Commit cbe57bb

Browse files
committed
Do not sanitize dependency requirements from YAML
1 parent c29b3b2 commit cbe57bb

File tree

2 files changed

+2
-29
lines changed

2 files changed

+2
-29
lines changed

lib/rubygems/yaml_serializer.rb

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -526,8 +526,7 @@ def build_dependency(node)
526526
d = Gem::Dependency.allocate
527527
d.instance_variable_set(:@name, hash["name"])
528528

529-
requirement = build_safe_requirement(hash["requirement"])
530-
d.instance_variable_set(:@requirement, requirement)
529+
d.instance_variable_set(:@requirement, hash["requirement"])
531530

532531
type = hash["type"]
533532
type = type ? type.to_s.sub(/^:/, "").to_sym : :runtime
@@ -559,26 +558,6 @@ def pairs_to_hash(node)
559558
result
560559
end
561560

562-
def build_safe_requirement(req_value)
563-
return Gem::Requirement.default unless req_value
564-
565-
converted = req_value
566-
return Gem::Requirement.default unless converted.is_a?(Gem::Requirement)
567-
568-
reqs = converted.instance_variable_get(:@requirements)
569-
if reqs&.is_a?(Array)
570-
valid = reqs.all? do |item|
571-
next true if item == Gem::Requirement::DefaultRequirement
572-
item.is_a?(Array) && item.size >= 2 && VALID_OPS.include?(item[0].to_s)
573-
end
574-
valid ? converted : Gem::Requirement.default
575-
else
576-
converted
577-
end
578-
rescue StandardError
579-
Gem::Requirement.default
580-
end
581-
582561
def validate_tag!(tag)
583562
unless @permitted_tags.include?(tag)
584563
if defined?(Psych::VERSION)

test/rubygems/test_gem_safe_yaml.rb

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -964,13 +964,7 @@ def test_load_dependency_missing_requirement_uses_default
964964
assert_kind_of Gem::Dependency, dep
965965
assert_equal "foo", dep.name
966966
assert_equal :runtime, dep.type
967-
if Gem.use_psych?
968-
# Psych doesn't set a default requirement
969-
assert_nil dep.instance_variable_get(:@requirement)
970-
else
971-
# YAMLSerializer sets a default Gem::Requirement
972-
assert_kind_of Gem::Requirement, dep.requirement
973-
end
967+
assert_nil dep.instance_variable_get(:@requirement)
974968
end
975969

976970
def test_load_dependency_missing_type_defaults_to_runtime

0 commit comments

Comments
 (0)