From 7f2866784d75eb288cf41f38b6fc770f36a3b335 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Fri, 6 Jan 2023 11:24:56 +0900 Subject: [PATCH 1/3] ClassLoader can handles Time class --- lib/psych/class_loader.rb | 1 + 1 file changed, 1 insertion(+) 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 From b543aa2b5b9509d5b8a9523b59e1bb9cd7a294f2 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Fri, 6 Jan 2023 11:25:46 +0900 Subject: [PATCH 2/3] Relax restricted classes for Psych.load --- lib/psych.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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, From d2c4013f6651fe0b609026587e3a11a5c78e13a1 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Fri, 6 Jan 2023 11:43:04 +0900 Subject: [PATCH 3/3] Try again with aliases option for permitted classes --- test/psych/test_object_references.rb | 2 ++ 1 file changed, 2 insertions(+) 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