From a673d16b16ec3bfbdbd69a615fa103cb96b1edbe 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 50efc35e..939f9d7a 100644 --- a/lib/psych/class_loader.rb +++ b/lib/psych/class_loader.rb @@ -17,6 +17,7 @@ class ClassLoader # :nodoc: REGEXP = 'Regexp' STRUCT = 'Struct' SYMBOL = 'Symbol' + TIME = 'Time' def initialize @cache = CACHE.dup From 0c42229f7abd6f1dff8c18f9a097e171e2628516 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 a95393c2..96e6fc61 100644 --- a/lib/psych.rb +++ b/lib/psych.rb @@ -365,9 +365,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 d0ca6fa7c62a99617e1d6576a6e47d0ec4a5ea11 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 86bb9034..a3778810 100644 --- a/test/psych/test_object_references.rb +++ b/test/psych/test_object_references.rb @@ -36,6 +36,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