From 7a1bf4fbb37a6643fdc509ac10425b133179ba4f Mon Sep 17 00:00:00 2001 From: Akinori MUSHA Date: Mon, 7 Jun 2021 12:47:01 +0900 Subject: [PATCH 1/2] Use safe_load when using Psych >=3.1 --- lib/http/cookie_jar/yaml_saver.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/http/cookie_jar/yaml_saver.rb b/lib/http/cookie_jar/yaml_saver.rb index 7062f43..532e598 100644 --- a/lib/http/cookie_jar/yaml_saver.rb +++ b/lib/http/cookie_jar/yaml_saver.rb @@ -21,7 +21,7 @@ def save(io, jar) def load(io, jar) begin - data = YAML.load(io) + data = load_yaml(io) rescue ArgumentError => e case e.message when %r{\Aundefined class/module Mechanize::} @@ -31,7 +31,7 @@ def load(io, jar) yaml = io.read # a gross hack yaml.gsub!(%r{^( [^ ].*:) !ruby/object:Mechanize::Cookie$}, "\\1") - data = YAML.load(yaml) + data = load_yaml(yaml) rescue Errno::ESPIPE @logger.warn "could not rewind the stream for conversion" if @logger rescue ArgumentError @@ -73,4 +73,14 @@ def load(io, jar) def default_options {} end + + if YAML.name == 'Psych' && Psych::VERSION >= '3.1' + def load_yaml(yaml) + YAML.safe_load(yaml, :permitted_classes => %w[Time HTTP::Cookie Mechanize::Cookie DomainName]) + end + else + def load_yaml(yaml) + YAML.load(yaml) + end + end end From 2c220f44dd4220685d052887e53d0453bcc3c194 Mon Sep 17 00:00:00 2001 From: Akinori MUSHA Date: Mon, 7 Jun 2021 14:44:18 +0900 Subject: [PATCH 2/2] Allow aliases because YAML.dump generates aliases when it sees multiple occurrences of an object --- lib/http/cookie_jar/yaml_saver.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/http/cookie_jar/yaml_saver.rb b/lib/http/cookie_jar/yaml_saver.rb index 532e598..bc83f04 100644 --- a/lib/http/cookie_jar/yaml_saver.rb +++ b/lib/http/cookie_jar/yaml_saver.rb @@ -76,7 +76,7 @@ def default_options if YAML.name == 'Psych' && Psych::VERSION >= '3.1' def load_yaml(yaml) - YAML.safe_load(yaml, :permitted_classes => %w[Time HTTP::Cookie Mechanize::Cookie DomainName]) + YAML.safe_load(yaml, :permitted_classes => %w[Time HTTP::Cookie Mechanize::Cookie DomainName], :aliases => true) end else def load_yaml(yaml)