1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/rubygems/safe_yaml.rb
hsbt 8ea464a9c1 Support keyword arguments with Pysch.safe_load provided by after Psych 3.1.0.pre1.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65192 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-10-20 02:51:09 +00:00

59 lines
1.5 KiB
Ruby

module Gem
###
# This module is used for safely loading YAML specs from a gem. The
# `safe_load` method defined on this module is specifically designed for
# loading Gem specifications. For loading other YAML safely, please see
# Psych.safe_load
module SafeYAML
WHITELISTED_CLASSES = %w(
Symbol
Time
Date
Gem::Dependency
Gem::Platform
Gem::Requirement
Gem::Specification
Gem::Version
Gem::Version::Requirement
YAML::Syck::DefaultKey
Syck::DefaultKey
)
WHITELISTED_SYMBOLS = %w(
development
runtime
)
if ::YAML.respond_to? :safe_load
def self.safe_load input
if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1')
::YAML.safe_load(input, whitelist_classes: WHITELISTED_CLASSES, whitelist_symbols: WHITELISTED_SYMBOLS, aliases: true)
else
::YAML.safe_load(input, WHITELISTED_CLASSES, WHITELISTED_SYMBOLS, true)
end
end
def self.load input
if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1')
::YAML.safe_load(input, whitelist_classes: [::Symbol])
else
::YAML.safe_load(input, [::Symbol])
end
end
else
unless Gem::Deprecate.skip
warn "YAML safe loading is not available. Please upgrade psych to a version that supports safe loading (>= 2.0)."
end
def self.safe_load input, *args
::YAML.load input
end
def self.load input
::YAML.load input
end
end
end
end