Skip to content

Commit 6084fcb

Browse files
committed
(PUP-11405) Replace deprecated/changed Psych YAML methods, pin rdoc
The keyword variant of safe_load() was added and the old variant deprecated in Psych 3.1.0. It has been removed in 4.0.0 (ruby/psych@0767227). The load_file() method was changed to be safe in Psych 4.0.1 (ruby/psych@f8a5e51). Use the unsafe_load_file() introduced in 3.3.2 to keep the same behaviour. The usages are guarded by version checks since Puppet still supports Ruby 2.5, which ships Psych 3.0.2. Also pin rdoc to prevent 6.0.4, which depends on Psych 4.0 causing issues with other dependencies that haven't been updated yet to work due to the same changes.
1 parent 5d7a81d commit 6084fcb

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ group(:features) do
2929
#gem 'ruby-shadow', '~> 2.5', require: false, platforms: [:ruby]
3030
gem 'minitar', '~> 0.9', require: false
3131
gem 'msgpack', '~> 1.2', require: false
32-
gem 'rdoc', '~> 6.0', require: false, platforms: [:ruby]
32+
gem 'rdoc', ['~> 6.0', '< 6.4.0'], require: false, platforms: [:ruby]
3333
# requires native augeas headers/libs
3434
# gem 'ruby-augeas', require: false, platforms: [:ruby]
3535
# requires native ldap headers/libs

lib/puppet/util/yaml.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ class YamlLoadError < Puppet::Error; end
2424
# @raise [YamlLoadException] If deserialization fails.
2525
# @return The parsed YAML, which can be Hash, Array or scalar types.
2626
def self.safe_load(yaml, allowed_classes = [], filename = nil)
27-
data = YAML.safe_load(yaml, allowed_classes, [], true, filename)
27+
if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0')
28+
data = YAML.safe_load(yaml, permitted_classes: allowed_classes, aliases: true, filename: filename)
29+
else
30+
data = YAML.safe_load(yaml, allowed_classes, [], true, filename)
31+
end
2832
data = false if data.nil?
2933
data
3034
rescue ::Psych::DisallowedClass => detail
@@ -68,7 +72,11 @@ def self.load_file(filename, default_value = false, strip_classes = false)
6872
end
6973
data.to_ruby || default_value
7074
else
71-
yaml = YAML.load_file(filename)
75+
if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.3.2')
76+
yaml = YAML.unsafe_load_file(filename)
77+
else
78+
yaml = YAML.load_file(filename)
79+
end
7280
yaml || default_value
7381
end
7482
rescue *YamlLoadExceptions => detail

0 commit comments

Comments
 (0)