diff --git a/lib/psych.rb b/lib/psych.rb index 0c158c9f..3b32a603 100644 --- a/lib/psych.rb +++ b/lib/psych.rb @@ -364,9 +364,10 @@ def self.safe_load yaml, permitted_classes: [], permitted_symbols: [], aliases: # Psych.load("---\n foo: bar", symbolize_names: true) # => {:foo=>"bar"} # # Raises a TypeError when `yaml` parameter is NilClass. This method is - # similar to `safe_load` except that `Symbol` objects are allowed by default. + # similar to `safe_load` except that `Symbol`, Date, DateTime and Time objects + # are allowed by default. # - def self.load yaml, permitted_classes: [Symbol], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false + def self.load yaml, permitted_classes: [Symbol, Date, DateTime, Time], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false safe_load yaml, permitted_classes: permitted_classes, permitted_symbols: permitted_symbols, aliases: aliases, diff --git a/lib/psych/class_loader.rb b/lib/psych/class_loader.rb index c8f50972..a9dfd09a 100644 --- a/lib/psych/class_loader.rb +++ b/lib/psych/class_loader.rb @@ -18,6 +18,7 @@ class ClassLoader # :nodoc: REGEXP = 'Regexp' STRUCT = 'Struct' SYMBOL = 'Symbol' + TIME = 'Time' def initialize @cache = CACHE.dup diff --git a/test/psych/test_object_references.rb b/test/psych/test_object_references.rb index 0498d54e..2496c8da 100644 --- a/test/psych/test_object_references.rb +++ b/test/psych/test_object_references.rb @@ -41,6 +41,8 @@ def assert_reference_trip obj assert_match(/\*-?\d+/, yml) begin data = Psych.load yml + rescue Psych::AliasesNotEnabled + data = Psych.load yml, aliases: true rescue Psych::DisallowedClass data = Psych.unsafe_load yml end