From 343ba3adf5f1bdf20d5a446c998c383594dd1fb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 8 Sep 2022 12:48:39 +0200 Subject: [PATCH] Fix FTBFS due to Ruby 3.1 / Psych 4.0 test incompatibility. Resolves: rhbz#2113704 --- ...-Permit-Time-class-loading-from-YAML.patch | 174 ++++++++++++++++++ rubygem-ronn-ng.spec | 12 +- 2 files changed, 185 insertions(+), 1 deletion(-) create mode 100644 rubygem-ronn-ng-0.9.1-Permit-Time-class-loading-from-YAML.patch diff --git a/rubygem-ronn-ng-0.9.1-Permit-Time-class-loading-from-YAML.patch b/rubygem-ronn-ng-0.9.1-Permit-Time-class-loading-from-YAML.patch new file mode 100644 index 0000000..36c21c7 --- /dev/null +++ b/rubygem-ronn-ng-0.9.1-Permit-Time-class-loading-from-YAML.patch @@ -0,0 +1,174 @@ +From 25158fabc2c83862de90f319b7dffc9e60904dac Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 30 Aug 2022 09:07:15 +0200 +Subject: [PATCH 1/4] Permit `Time` class loading from YAML. + +Since Psych 4.0, the `safe_load` is used as default loading mechanism. +There are just a few permitted classes and `Time` is not one of them +[[1]]. This results it test failure: + +~~~ +Error: test_converting_to_yaml(DocumentTest::TestSimpleConventionallyNamedDocument): Psych::DisallowedClass: Tried to load unspecified class: Time +~~~ + +Please also note that in YAML specs 1.2, the `timestamp` is not +listed as supported tag anymore [[2]]. + +Given that: + +1) ronn-ng does not provide any supported way of loading the serialized + YAML. +2) The `to_yaml` does not appear to be used internally/externally + anywhere. +3) If there were users of this functionality, it would have been already + know, reported and fixed at this moment. + +The best course of action is fixing the test case by listing the `Time` +as valid class for parsing. + +Fixes #80 + +[1]: https://docs.ruby-lang.org/en/master/Psych.html#method-c-safe_load +[2]: https://github.com/yaml/yaml-spec/issues/268 +--- + test/test_ronn_document.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/test_ronn_document.rb b/test/test_ronn_document.rb +index 75788dc..a86793f 100644 +--- a/test/test_ronn_document.rb ++++ b/test/test_ronn_document.rb +@@ -146,7 +146,7 @@ def canonicalize(text) + 'toc' => [['NAME', 'NAME']], + 'organization' => nil, + 'manual' => nil +- }, YAML.load(@doc.to_yaml)) ++ }, YAML.load(@doc.to_yaml, permitted_classes: [Time])) + end + + test 'converting to json' do + +From c8aaa0235ed0dd41ea7ea83e5133ae494cbf072a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 30 Aug 2022 09:59:07 +0200 +Subject: [PATCH 2/4] Check if `YAML.load` supports `permitted_classes` kwarg. + +This is due to Ruby 3.1 + Psych 4.0 changed changed `YAML.load` to use +`safe_load` by default. +--- + test/test_ronn_document.rb | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/test/test_ronn_document.rb b/test/test_ronn_document.rb +index a86793f..c9c08c7 100644 +--- a/test/test_ronn_document.rb ++++ b/test/test_ronn_document.rb +@@ -137,6 +137,15 @@ def canonicalize(text) + + test 'converting to yaml' do + require 'yaml' ++ # Check if `permitted_classes` keyword argument is available. That means ++ # `safe_load` is the default loading mechanism, i.e. Ruby 3.1 + Psych 4.0 ++ # are used. ++ kwargs = !(YAML.method(:load).parameters & [[:key, :permitted_classes]]).empty? ++ loaded_yaml = if kwargs ++ YAML.load(@doc.to_yaml, permitted_classes: [Time]) ++ else ++ YAML.load(@doc.to_yaml) ++ end + assert_equal({ + 'section' => '1', + 'name' => 'hello', +@@ -146,7 +155,7 @@ def canonicalize(text) + 'toc' => [['NAME', 'NAME']], + 'organization' => nil, + 'manual' => nil +- }, YAML.load(@doc.to_yaml, permitted_classes: [Time])) ++ }, loaded_yaml) + end + + test 'converting to json' do + +From d7bbcd7ef4461bd28eb3e9fc1880f7a5d5d46d88 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 30 Aug 2022 10:09:19 +0200 +Subject: [PATCH 3/4] Extract the YAML loading logic into function + +This is to make the test case less poluted. Can be dropped once only +Ruby 3.1+ is supported. +--- + test/test_ronn_document.rb | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +diff --git a/test/test_ronn_document.rb b/test/test_ronn_document.rb +index c9c08c7..ae6f72a 100644 +--- a/test/test_ronn_document.rb ++++ b/test/test_ronn_document.rb +@@ -12,6 +12,18 @@ def canonicalize(text) + .tr('"', "'") + end + ++ def yaml_load(yaml) ++ # Check if `permitted_classes` keyword argument is available. That means ++ # `safe_load` is the default loading mechanism, i.e. Ruby 3.1 + Psych 4.0 ++ # are used. ++ kwargs = !(YAML.method(:load).parameters & [[:key, :permitted_classes]]).empty? ++ if kwargs ++ YAML.load(yaml, permitted_classes: [Time]) ++ else ++ YAML.load(yaml) ++ end ++ end ++ + test 'new with path' do + doc = Ronn::Document.new(SIMPLE_FILE) + assert_equal File.read(SIMPLE_FILE), doc.data +@@ -137,15 +149,6 @@ def canonicalize(text) + + test 'converting to yaml' do + require 'yaml' +- # Check if `permitted_classes` keyword argument is available. That means +- # `safe_load` is the default loading mechanism, i.e. Ruby 3.1 + Psych 4.0 +- # are used. +- kwargs = !(YAML.method(:load).parameters & [[:key, :permitted_classes]]).empty? +- loaded_yaml = if kwargs +- YAML.load(@doc.to_yaml, permitted_classes: [Time]) +- else +- YAML.load(@doc.to_yaml) +- end + assert_equal({ + 'section' => '1', + 'name' => 'hello', +@@ -155,7 +158,7 @@ def canonicalize(text) + 'toc' => [['NAME', 'NAME']], + 'organization' => nil, + 'manual' => nil +- }, loaded_yaml) ++ }, yaml_load(@doc.to_yaml)) + end + + test 'converting to json' do + +From 7c49ae1926728987ca97e014931bb9148aa868b1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 30 Aug 2022 10:25:46 +0200 +Subject: [PATCH 4/4] Use symbol array literal. + +This should make Rubocop happy. +--- + test/test_ronn_document.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/test_ronn_document.rb b/test/test_ronn_document.rb +index ae6f72a..aa97a88 100644 +--- a/test/test_ronn_document.rb ++++ b/test/test_ronn_document.rb +@@ -16,7 +16,7 @@ def yaml_load(yaml) + # Check if `permitted_classes` keyword argument is available. That means + # `safe_load` is the default loading mechanism, i.e. Ruby 3.1 + Psych 4.0 + # are used. +- kwargs = !(YAML.method(:load).parameters & [[:key, :permitted_classes]]).empty? ++ kwargs = !(YAML.method(:load).parameters & [%i[key permitted_classes]]).empty? + if kwargs + YAML.load(yaml, permitted_classes: [Time]) + else diff --git a/rubygem-ronn-ng.spec b/rubygem-ronn-ng.spec index bc5cd15..1316f7b 100644 --- a/rubygem-ronn-ng.spec +++ b/rubygem-ronn-ng.spec @@ -3,11 +3,15 @@ Name: rubygem-%{gem_name} Version: 0.9.1 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Builds man pages from Markdown License: MIT URL: https://github.com/apjanke/ronn-ng Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem +# Fix Ruby 3.1 / Psych 4.0 test compatibility. +# https://github.com/apjanke/ronn-ng/issues/80 +# https://github.com/apjanke/ronn-ng/pull/81 +Patch0: rubygem-ronn-ng-0.9.1-Permit-Time-class-loading-from-YAML.patch BuildRequires: ruby(release) BuildRequires: rubygems-devel BuildRequires: ruby @@ -40,6 +44,8 @@ Documentation for %{name}. %prep %setup -q -n %{gem_name}-%{version} +%patch0 -p1 + # Upstream specifies mustache==0.7, but we have 1.1 and it seems to work fine... %gemspec_remove_dep -g mustache "~> 0.7" @@ -108,6 +114,10 @@ popd %{gem_instdir}/test %changelog +* Thu Sep 08 2022 Vít Ondruch - 0.9.1-6 +- Fix FTBFS due to Ruby 3.1 / Psych 4.0 test incompatibility. + Resolves: rhbz#2113704 + * Sat Jul 23 2022 Fedora Release Engineering - 0.9.1-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild