Compare commits

..

4 commits

Author SHA1 Message Date
Mamoru TASAKA
cc56a27505 Make test suite pass with libxml2 2.9.14 2022-06-03 16:41:29 +09:00
Mamoru TASAKA
58706a84c8 apply ppc64le gc compact issue 2022-05-10 18:03:27 +09:00
Mamoru TASAKA
7984adc4e9 Backport CVE-2022-29181 from between 1.13.5 and 1.13.6 2022-05-10 17:48:50 +09:00
Mamoru TASAKA
653b4da6c7 Backport CVE-2022-24836 from between 1.13.3 and 1.13.4 2022-04-14 16:47:39 +09:00
10 changed files with 463 additions and 291 deletions

82
.gitignore vendored
View file

@ -1,2 +1,80 @@
/nokogiri-*.gem
/rubygem-nokogiri-*-full.tar.gz
nokogiri-1.4.2.gem
nokogiri-1.4.3.1.gem
/nokogiri-1.5.0.beta.2.gem
/nokogiri-1.5.0.beta.3.gem
/nokogiri-1.5.0.beta.4.gem
/nokogiri-1.5.0.gem
/nokogiri-1.5.2.gem
/nokogiri-1.5.5.gem
/nokogiri-1.5.6.gem
/nokogiri-1.5.9.gem
/nokogiri-1.6.0.gem
/nokogiri-1.6.1.gem
/nokogiri-1.6.2.1.gem
/nokogiri-1.6.3.1.gem
/nokogiri-1.6.4.1.gem
/nokogiri-1.6.5.gem
/nokogiri-1.6.6.1.gem
/nokogiri-1.6.6.2.gem
/nokogiri-1.6.7.rc3.gem
/nokogiri-1.6.7.2.gem
/nokogiri-1.6.8.gem
/nokogiri-1.6.8.1.gem
/nokogiri-1.7.0.gem
/nokogiri-1.7.0.1.gem
/nokogiri-1.7.1.gem
/nokogiri-1.7.2.gem
/nokogiri-1.8.0.gem
/nokogiri-1.8.1.gem
/nokogiri-1.8.2.gem
/nokogiri-1.8.3.gem
/nokogiri-1.8.4.gem
/nokogiri-1.8.5.gem
/nokogiri-1.9.1.gem
/rubygem-nokogiri-1.9.1-full.tar.gz
/nokogiri-1.10.0.gem
/rubygem-nokogiri-1.10.0-full.tar.gz
/nokogiri-1.10.1.gem
/rubygem-nokogiri-1.10.1-full.tar.gz
/nokogiri-1.10.2.gem
/rubygem-nokogiri-1.10.2-full.tar.gz
/nokogiri-1.10.3.gem
/rubygem-nokogiri-1.10.3-full.tar.gz
/nokogiri-1.10.4.gem
/rubygem-nokogiri-1.10.4-full.tar.gz
/rubygem-nokogiri-1.10.5-full.tar.gz
/nokogiri-1.10.5.gem
/nokogiri-1.10.7.gem
/rubygem-nokogiri-1.10.7-full.tar.gz
/nokogiri-1.10.8.gem
/rubygem-nokogiri-1.10.8-full.tar.gz
/nokogiri-1.10.9.gem
/rubygem-nokogiri-1.10.9-full.tar.gz
/nokogiri-1.10.10.gem
/rubygem-nokogiri-1.10.10-full.tar.gz
/nokogiri-1.11.0.rc4.gem
/rubygem-nokogiri-1.11.0.rc4-full.tar.gz
/rubygem-nokogiri-1.11.0-full.tar.gz
/nokogiri-1.11.0.gem
/rubygem-nokogiri-1.11.1-full.tar.gz
/nokogiri-1.11.1.gem
/nokogiri-1.11.2.gem
/rubygem-nokogiri-1.11.2-full.tar.gz
/nokogiri-1.11.3.gem
/rubygem-nokogiri-1.11.3-full.tar.gz
/nokogiri-1.11.4.gem
/rubygem-nokogiri-1.11.4-full.tar.gz
/nokogiri-1.11.7.gem
/rubygem-nokogiri-1.11.7-full.tar.gz
/nokogiri-1.12.2.gem
/rubygem-nokogiri-1.12.2-full.tar.gz
/nokogiri-1.12.3.gem
/rubygem-nokogiri-1.12.3-full.tar.gz
/nokogiri-1.12.4.gem
/rubygem-nokogiri-1.12.4-full.tar.gz
/nokogiri-1.12.5.gem
/rubygem-nokogiri-1.12.5-full.tar.gz
/nokogiri-1.13.0.gem
/rubygem-nokogiri-1.13.0-full.tar.gz
/nokogiri-1.13.1.gem
/rubygem-nokogiri-1.13.1-full.tar.gz

View file

@ -1,17 +1,5 @@
#!/bin/bash
git_restore_timestamp()
{
set +x
echo "Restore timestamps"
git ls-tree -r --name-only HEAD | while read f
do
unixtime=$(git log -n 1 --pretty='%ct' -- $f)
touch -d "@${unixtime}" $f
done
set -x
}
if [ $# -lt 2 ]
then
echo "$0 <name> <version>"
@ -29,14 +17,10 @@ pushd $TMPDIRPATH
git clone https://github.com/sparklemotion/$1.git
pushd $1
git reset --hard v$2
git_restore_timestamp
popd
ln -sf $1 $1-$2
tar czf \
${CURRDIR}/rubygem-$1-$2-full.tar.gz \
"--exclude=nokogiri-$2/./.git" \
$1-$2/./
tar czf ${CURRDIR}/rubygem-$1-$2-full.tar.gz $1-$2/./
popd

View file

@ -1,13 +1,10 @@
--- nokogiri-1.18.5/lib/nokogiri/version/info.rb.warn 2023-11-29 01:25:54.000000000 +0900
+++ nokogiri-1.18.5/lib/nokogiri/version/info.rb 2025-03-26 15:51:51.468291434 +0900
@@ -70,6 +70,10 @@ module Nokogiri
end
--- nokogiri-1.11.0.rc4/lib/nokogiri/version/info.rb.warn 2020-12-31 16:56:11.533949657 +0900
+++ nokogiri-1.11.0.rc4/lib/nokogiri/version/info.rb 2020-12-31 16:59:38.576697147 +0900
@@ -58,6 +58,7 @@ module Nokogiri
def warnings
+ []
+ end
+
+ def warnings_original
warnings = []
+ return warnings
if libxml2?
if compiled_libxml_version != loaded_libxml_version

View file

@ -0,0 +1,42 @@
commit e444525ef1634b675cd1cf52d39f4320ef0aecfd
Author: Mike Dalessio <mike.dalessio@gmail.com>
Date: Sun Apr 10 14:42:04 2022 -0400
fix(perf): HTML4::EncodingReader detection
diff --git a/lib/nokogiri/html4/document.rb b/lib/nokogiri/html4/document.rb
index 177efc04..fbc22d20 100644
--- a/lib/nokogiri/html4/document.rb
+++ b/lib/nokogiri/html4/document.rb
@@ -268,7 +268,7 @@ module Nokogiri
end
def self.detect_encoding(chunk)
- (m = chunk.match(/\A(<\?xml[ \t\r\n]+[^>]*>)/)) &&
+ (m = chunk.match(/\A(<\?xml[ \t\r\n][^>]*>)/)) &&
(return Nokogiri.XML(m[1]).encoding)
if Nokogiri.jruby?
diff --git a/test/html4/test_document_encoding.rb b/test/html4/test_document_encoding.rb
index 61153017..ecb4aa9a 100644
--- a/test/html4/test_document_encoding.rb
+++ b/test/html4/test_document_encoding.rb
@@ -155,6 +155,18 @@ class TestNokogiriHtmlDocument < Nokogiri::TestCase
end
end
end
+
+ it "does not start backtracking during detection of XHTML encoding" do
+ # this test is a quick and dirty version
+ # of the more complete perf test that is on main.
+ n = 40_000
+ redos_string = "<?xml " + (" " * n)
+ redos_string.encode!("ASCII-8BIT")
+ start_time = Time.now
+ Nokogiri::HTML4(redos_string)
+ elapsed_time = Time.now - start_time
+ assert_operator(elapsed_time, :<, 1)
+ end
end
end
end

View file

@ -0,0 +1,182 @@
From db05ba9a1bd4b90aa6c76742cf6102a7c7297267 Mon Sep 17 00:00:00 2001
From: Mike Dalessio <mike.dalessio@gmail.com>
Date: Fri, 6 May 2022 21:57:41 -0400
Subject: [PATCH] fix: {HTML4,XML}::SAX::{Parser,ParserContext} check arg types
Previously, arguments of the wrong type might cause segfault on CRuby.
---
CHANGELOG.md | 3 ++-
ext/java/nokogiri/Html4SaxParserContext.java | 11 +++++++++++
ext/java/nokogiri/XmlSaxParserContext.java | 7 +++++--
ext/java/nokogiri/internals/ParserContext.java | 8 +++++++-
ext/nokogiri/html4_sax_parser_context.c | 5 ++---
ext/nokogiri/xml_sax_parser_context.c | 13 ++++++++++---
lib/nokogiri/html4/sax/parser.rb | 2 +-
test/html4/sax/test_parser.rb | 8 +++++++-
test/html4/sax/test_parser_context.rb | 9 +++++++++
test/xml/sax/test_parser.rb | 8 +++++++-
test/xml/sax/test_parser_context.rb | 7 +++++++
11 files changed, 68 insertions(+), 13 deletions(-)
diff --git a/ext/nokogiri/html4_sax_parser_context.c b/ext/nokogiri/html4_sax_parser_context.c
index dec0d88fe..54adca4cb 100644
--- a/ext/nokogiri/html4_sax_parser_context.c
+++ b/ext/nokogiri/html4_sax_parser_context.c
@@ -19,9 +19,8 @@ parse_memory(VALUE klass, VALUE data, VALUE encoding)
{
htmlParserCtxtPtr ctxt;
- if (NIL_P(data)) {
- rb_raise(rb_eArgError, "data cannot be nil");
- }
+ Check_Type(data, T_STRING);
+
if (!(int)RSTRING_LEN(data)) {
rb_raise(rb_eRuntimeError, "data cannot be empty");
}
diff --git a/ext/nokogiri/xml_sax_parser_context.c b/ext/nokogiri/xml_sax_parser_context.c
index 60449347a..60c491984 100644
--- a/ext/nokogiri/xml_sax_parser_context.c
+++ b/ext/nokogiri/xml_sax_parser_context.c
@@ -2,6 +2,8 @@
VALUE cNokogiriXmlSaxParserContext ;
+static ID id_read;
+
static void
deallocate(xmlParserCtxtPtr ctxt)
{
@@ -26,6 +28,10 @@ parse_io(VALUE klass, VALUE io, VALUE encoding)
xmlParserCtxtPtr ctxt;
xmlCharEncoding enc = (xmlCharEncoding)NUM2INT(encoding);
+ if (!rb_respond_to(io, id_read)) {
+ rb_raise(rb_eTypeError, "argument expected to respond to :read");
+ }
+
ctxt = xmlCreateIOParserCtxt(NULL, NULL,
(xmlInputReadCallback)noko_io_read,
(xmlInputCloseCallback)noko_io_close,
@@ -62,9 +68,8 @@ parse_memory(VALUE klass, VALUE data)
{
xmlParserCtxtPtr ctxt;
- if (NIL_P(data)) {
- rb_raise(rb_eArgError, "data cannot be nil");
- }
+ Check_Type(data, T_STRING);
+
if (!(int)RSTRING_LEN(data)) {
rb_raise(rb_eRuntimeError, "data cannot be empty");
}
@@ -278,4 +283,6 @@ noko_init_xml_sax_parser_context()
rb_define_method(cNokogiriXmlSaxParserContext, "recovery", get_recovery, 0);
rb_define_method(cNokogiriXmlSaxParserContext, "line", line, 0);
rb_define_method(cNokogiriXmlSaxParserContext, "column", column, 0);
+
+ id_read = rb_intern("read");
}
diff --git a/lib/nokogiri/html4/sax/parser.rb b/lib/nokogiri/html4/sax/parser.rb
index 2a074b6b9..1f8c03af6 100644
--- a/lib/nokogiri/html4/sax/parser.rb
+++ b/lib/nokogiri/html4/sax/parser.rb
@@ -28,7 +28,7 @@ class Parser < Nokogiri::XML::SAX::Parser
###
# Parse html stored in +data+ using +encoding+
def parse_memory(data, encoding = "UTF-8")
- raise ArgumentError unless data
+ raise TypeError unless String === data
return if data.empty?
ctx = ParserContext.memory(data, encoding)
yield ctx if block_given?
diff --git a/test/html4/sax/test_parser.rb b/test/html4/sax/test_parser.rb
index 3917dce2e..4dc6ac61f 100644
--- a/test/html4/sax/test_parser.rb
+++ b/test/html4/sax/test_parser.rb
@@ -54,7 +54,7 @@ def test_parse_file_with_dir
end
def test_parse_memory_nil
- assert_raises(ArgumentError) do
+ assert_raises(TypeError) do
@parser.parse_memory(nil)
end
end
@@ -161,6 +161,12 @@ def test_parsing_dom_error_from_io
def test_empty_processing_instruction
@parser.parse_memory("<strong>this will segfault<?strong>")
end
+
+ it "handles invalid types gracefully" do
+ assert_raises(TypeError) { Nokogiri::HTML::SAX::Parser.new.parse(0xcafecafe) }
+ assert_raises(TypeError) { Nokogiri::HTML::SAX::Parser.new.parse_memory(0xcafecafe) }
+ assert_raises(TypeError) { Nokogiri::HTML::SAX::Parser.new.parse_io(0xcafecafe) }
+ end
end
end
end
diff --git a/test/html4/sax/test_parser_context.rb b/test/html4/sax/test_parser_context.rb
index 0a0eda64c..594a3ac82 100644
--- a/test/html4/sax/test_parser_context.rb
+++ b/test/html4/sax/test_parser_context.rb
@@ -40,6 +40,15 @@ def test_from_file
ctx.parse_with(parser)
# end
end
+
+ def test_graceful_handling_of_invalid_types
+ assert_raises(TypeError) { ParserContext.new(0xcafecafe) }
+ assert_raises(TypeError) { ParserContext.memory(0xcafecafe, "UTF-8") }
+ assert_raises(TypeError) { ParserContext.io(0xcafecafe, 1) }
+ assert_raises(TypeError) { ParserContext.io(StringIO.new("asdf"), "should be an index into ENCODINGS") }
+ assert_raises(TypeError) { ParserContext.file(0xcafecafe, "UTF-8") }
+ assert_raises(TypeError) { ParserContext.file("path/to/file", 0xcafecafe) }
+ end
end
end
end
diff --git a/test/xml/sax/test_parser.rb b/test/xml/sax/test_parser.rb
index 6c0f1fc88..ac7d4ead0 100644
--- a/test/xml/sax/test_parser.rb
+++ b/test/xml/sax/test_parser.rb
@@ -73,6 +73,12 @@ class TestCase
end
end
+ it "handles invalid types gracefully" do
+ assert_raises(TypeError) { Nokogiri::XML::SAX::Parser.new.parse(0xcafecafe) }
+ assert_raises(TypeError) { Nokogiri::XML::SAX::Parser.new.parse_memory(0xcafecafe) }
+ assert_raises(TypeError) { Nokogiri::XML::SAX::Parser.new.parse_io(0xcafecafe) }
+ end
+
it :test_namespace_declaration_order_is_saved do
parser.parse(<<~EOF)
<root xmlns:foo='http://foo.example.com/' xmlns='http://example.com/'>
@@ -263,7 +269,7 @@ def call_parse_io_with_encoding(encoding)
end
it :test_render_parse_nil_param do
- assert_raises(ArgumentError) { parser.parse_memory(nil) }
+ assert_raises(TypeError) { parser.parse_memory(nil) }
end
it :test_bad_encoding_args do
diff --git a/test/xml/sax/test_parser_context.rb b/test/xml/sax/test_parser_context.rb
index e38efd271..ba9857943 100644
--- a/test/xml/sax/test_parser_context.rb
+++ b/test/xml/sax/test_parser_context.rb
@@ -80,6 +80,13 @@ def test_recovery
assert(pc.recovery)
end
+ def test_graceful_handling_of_invalid_types
+ assert_raises(TypeError) { ParserContext.new(0xcafecafe) }
+ assert_raises(TypeError) { ParserContext.memory(0xcafecafe) }
+ assert_raises(TypeError) { ParserContext.io(0xcafecafe, 1) }
+ assert_raises(TypeError) { ParserContext.io(StringIO.new("asdf"), "should be an index into ENCODINGS") }
+ end
+
def test_from_io
ctx = ParserContext.new(StringIO.new("fo"), "UTF-8")
assert(ctx)

View file

@ -0,0 +1,63 @@
From 520f4e7d64eab9b862b7fe9c683d348be9f4eb0a Mon Sep 17 00:00:00 2001
From: Mike Dalessio <mike.dalessio@gmail.com>
Date: Mon, 2 May 2022 18:04:39 -0400
Subject: [PATCH] dep: update libxml2 to v2.9.14
from v2.9.13
https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.9.14
---
dependencies.yml | 6 +--
...t-approach-to-fix-quadratic-behavior.patch | 45 -------------------
test/html4/test_comments.rb | 25 ++++++++++-
test/html4/test_document.rb | 25 +++++++----
4 files changed, 43 insertions(+), 58 deletions(-)
delete mode 100644 patches/libxml2/0010-Revert-Different-approach-to-fix-quadratic-behavior.patch
diff --git a/test/html4/test_comments.rb b/test/html4/test_comments.rb
index 32d7a8785..56fd50682 100644
--- a/test/html4/test_comments.rb
+++ b/test/html4/test_comments.rb
@@ -173,7 +173,7 @@ class TestComment < Nokogiri::TestCase
let(:body) { doc.at_css("body") }
let(:subject) { doc.at_css("div#under-test") }
- if Nokogiri.uses_libxml?
+ if Nokogiri.uses_libxml?("<=2.9.13")
it "ignores up to the next '>'" do # NON-COMPLIANT
assert_equal 2, body.children.length
assert_equal body.children[0], subject
@@ -183,10 +183,33 @@ class TestComment < Nokogiri::TestCase
assert body.children[1].text?
assert_equal "-->hello", body.children[1].content
end
+ elsif Nokogiri.uses_libxml?
+ it "parses as pcdata" do # NON-COMPLIANT
+ assert_equal 1, body.children.length
+ assert_equal subject, body.children.first
+
+ assert_equal 3, subject.children.length
+ subject.children[0].tap do |child|
+ assert_predicate(child, :text?)
+ assert_equal("<! comment ", child.content)
+ end
+ subject.children[1].tap do |child|
+ assert_predicate(child, :element?)
+ assert_equal("div", child.name)
+ assert_equal("inner content", child.content)
+ end
+ subject.children[2].tap do |child|
+ assert_predicate(child, :text?)
+ assert_equal("-->hello", child.content)
+ end
+ end
end
if Nokogiri.jruby?
it "ignores up to the next '-->'" do # NON-COMPLIANT
+ assert_equal 1, body.children.length
+ assert_equal subject, body.children.first
+
assert_equal 1, subject.children.length
assert subject.children[0].text?
assert_equal "hello", subject.children[0].content

View file

@ -1,11 +0,0 @@
diff -urp '--exclude=*~' nokogiri-1.18.10.orig/test/helper.rb nokogiri-1.18.10/test/helper.rb
--- nokogiri-1.18.10.orig/test/helper.rb 2025-12-24 12:29:06.569389292 +0900
+++ nokogiri-1.18.10/test/helper.rb 2025-12-24 12:39:48.443826371 +0900
@@ -41,6 +41,7 @@ warn
require "minitest/autorun"
require "minitest/benchmark"
+require "minitest/mock"
if !Nokogiri.jruby? && ENV["NCPU"].to_i > 1
require "minitest/parallel_fork"

View file

@ -0,0 +1,26 @@
--- nokogiri-1.5.0/Rakefile.debug 2012-01-18 16:23:02.472224272 +0900
+++ nokogiri-1.5.0/Rakefile 2012-01-18 16:23:29.935430496 +0900
@@ -83,14 +83,21 @@
HOE.spec.files += ['lib/nokogiri/nokogiri.jar']
end
else
- require 'tasks/cross_compile'
+ do_cross_compile = true
+ begin
+ require 'tasks/cross_compile'
+ rescue RuntimeError => e
+ warn "WARNING: Could not perform some cross-compiling: #{e}"
+ do_cross_compile = false
+ end
require "rake/extensiontask"
- HOE.spec.files.reject! { |f| f =~ %r{^ext/java|\.jar$} }
+ HOE.spec.files.reject! { |f| f =~ %r{^ext/java|\.jar$} } if do_cross_compile
Rake::ExtensionTask.new("nokogiri", HOE.spec) do |ext|
ext.lib_dir = File.join(*['lib', 'nokogiri', ENV['FAT_DIR']].compact)
ext.config_options << ENV['EXTOPTS']
+ next unless do_cross_compile
ext.cross_compile = true
ext.cross_platform = ["x86-mswin32-60", "x86-mingw32"]
ext.cross_config_options << "--with-xml2-include=#{File.join($recipes[:libxml2].path, 'include', 'libxml2')}"

View file

@ -1,25 +1,25 @@
%global mainver 1.19.0
%global mainver 1.13.1
#%%global prever .rc4
%global baserelease 2
%global mainrel 4
%global prerpmver %(echo "%{?prever}" | sed -e 's|\\.||g')
%global gem_name nokogiri
%undefine __brp_mangle_shebangs
%undefine _changelog_trimtime
Summary: An HTML, XML, SAX, and Reader parser
Name: rubygem-%{gem_name}
Version: %{mainver}
Release: %{?prever:0.}%{baserelease}%{?prever:.%{prerpmver}}%{?dist}
Release: %{?prever:0.}%{mainrel}%{?prever:.%{prerpmver}}%{?dist}
# SPDX confirmed
# MIT: see LICENSE.md
# Apache-2.0
# ASL 2.0
# 1.12.0 bundles forked and modified gumbo -
# see gumbo-parser/src/attribute.c and ext/nokogiri/gumbo.c
# also lib/nokogiri/html5 is licensed under ASL 2.0
License: MIT AND Apache-2.0
License: MIT and ASL 2.0
Provides: bundled(gumbo-parser) = 0.10.1
URL: https://nokogiri.org
@ -27,19 +27,25 @@ Source0: https://rubygems.org/gems/%{gem_name}-%{mainver}%{?prever}.gem
# %%{SOURCE2} %%{name} %%{version}
Source1: rubygem-%{gem_name}-%{version}%{?prever}-full.tar.gz
Source2: nokogiri-create-full-tarball.sh
# ./test/html/test_element_description.rb:62 fails, as usual......
# Patch0: rubygem-nokogiri-1.5.0.beta3-test-failure.patch
#Patch0: rubygem-nokogiri-1.5.0-allow-non-crosscompile.patch
# Shut down libxml2 version unmatching warning
Patch0: %{name}-1.11.0.rc4-shutdown-libxml2-warning.patch
# https://github.com/sparklemotion/nokogiri/commit/e444525ef1634b675cd1cf52d39f4320ef0aecfd
# Fix for CVE-2022-24836
Patch1: %{name}-1.13.3-CVE-2022-24836.patch
# https://github.com/sparklemotion/nokogiri/commit/db05ba9a1bd4b90aa6c76742cf6102a7c7297267
# Fix for CVE-2022-24836, backported
Patch2: %{name}-1.13.5-6-CVE-2022-29181-backport.patch
# Test suite for libxml2 2.9.14
# https://github.com/sparklemotion/nokogiri/commit/520f4e7d64eab9b862b7fe9c683d348be9f4eb0a
Patch3: %{name}-1.13.x-testsuite-libxml2-2-9-14.patch
BuildRequires: ruby(release)
BuildRequires: ruby(rubygems)
##
## For %%check
BuildRequires: rubygem(minitest)
BuildRequires: rubygem(minitest-mock)
%if !0%{?rhel}
# For test/xml/test_document_encoding.rb
# Drop rubygem(rubyzip) build dependency in RHEL
BuildRequires: rubygem(rubyzip)
%endif
BuildRequires: rubygems-devel
Obsoletes: ruby-%{gem_name} <= 1.5.2-2
#BuildRequires: ruby(racc)
@ -53,6 +59,7 @@ BuildRequires: libxslt-devel
BuildRequires: ruby-devel
# ruby27 needs this explicitly
BuildRequires: rubygem(racc)
Requires: rubygem(racc)
%description
Nokogiri parses and searches XML/HTML very quickly, and also has
@ -61,6 +68,16 @@ correctly implemented CSS3 selector support as well as XPath support.
Nokogiri also features an Hpricot compatibility layer to help ease the change
to using correct CSS and XPath.
%if 0
%package jruby
Summary: JRuby support for %{name}
Requires: %{name} = %{version}-%{release}
%description jruby
This package contains JRuby support for %{name}.
%endif
%package doc
Summary: Documentation for %{name}
Requires: %{name} = %{version}-%{release}
@ -80,23 +97,24 @@ This package provides non-Gem support for %{gem_name}.
%prep
%setup -q -n %{gem_name}-%{version} -a 1
cp -a %{gem_name}-%{version}/{.,*} .
mv ../%{gem_name}-%{version}.gemspec .
# patches
%patch -P0 -p1
(
cd %{gem_name}-%{version}/
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
cd ..
cp -a %{gem_name}-%{version}/{lib,ext} .
)
# remove bundled external libraries
sed -i \
-e 's|, "ports/archives/[^"][^"]*"||g' \
-e 's|, "patches/[^"][^"]*"||g' \
-e 's|, "ports/patches/[^"][^"]*"||g' \
%{gem_name}-%{version}.gemspec
# Make sure gem build will complain later if the previous regex is not enough.
rm -rf \
ports \
patches \
%{nil}
# Actually not needed when using system libraries
sed -i -e '\@mini_portile@d' %{gem_name}-%{version}.gemspec
@ -105,7 +123,7 @@ sed -i -e '\@mini_portile@d' %{gem_name}-%{version}.gemspec
sed -i \
ext/nokogiri/extconf.rb \
-e "s@^\(def process_recipe.*\)\$@\1 ; return true@" \
-e "s@^\([ \t]*append_cppflags\).*gumbo.*\$@\1(\"-I$(pwd)/gumbo-parser/src\")@" \
-e "s@^\(append_cppflags\).*gumbo.*\$@\1(\"-I$(pwd)/gumbo-parser/src\")@" \
-e "\@libs.*gumbo@s@File\.join.*@\"$(pwd)/gumbo-parser/src/libgumbo.a\"@" \
-e "\@LIBPATH.*gumbo@s|^\(.*\)\$|# \1|" \
%{nil}
@ -120,10 +138,10 @@ sed -i \
gumbo-parser/src/Makefile \
-e 's|^\(CFLAGS.*=.*\)$|\1 -fPIC|'
%build
# Ummm...
env LANG=C.UTF-8 gem build %{gem_name}-%{version}.gemspec
%build
# 1.6.0 needs this
export NOKOGIRI_USE_SYSTEM_LIBRARIES=yes
@ -139,7 +157,7 @@ popd
chmod 0644 .%{gem_dir}/cache/%{gem_name}-%{mainver}%{?prever}.gem
# Remove precompiled Java .jar file
find .%{gem_instdir}/lib/ -name '*.jar' -delete
rm -f .%{gem_instdir}/lib/*.jar
# For now remove JRuby support
rm -rf .%{gem_instdir}/ext/java
@ -176,15 +194,13 @@ do
done
# Copy document files from full source
cp -p [A-Z]* %{buildroot}%{gem_instdir}/
cp -p %{gem_name}-%{version}/[A-Z]* %{buildroot}%{gem_instdir}/
# cleanups
# Remove bundled gumbo parser
pushd %{buildroot}%{gem_instdir}
rm -rf \
Gemfile* \
Rakefile \
Vagrantfile \
dependencies.yml \
ext \
*gemspec \
@ -192,9 +208,10 @@ rm -rf \
ports \
%{nil}
pushd gumbo-parser
find . -type f | \
grep -v CHANGES.md | \
grep -v THANKS | \
rm \
Makefile \
%{nil}
find src -type f | \
grep -v README.md | \
xargs rm -f
@ -210,12 +227,12 @@ export TZ="Asia/Tokyo"
LANG=C.UTF-8
# Copy test files from full tarball
cp -a test/ ./%{gem_instdir}
cp -a %{gem_name}-%{version}/test/ ./%{gem_instdir}
pushd ./%{gem_instdir}
# Remove unneeded simplecov coverage test
sed -i test/helper.rb \
-e '\@^ require.*simplecov@,\@^ end$@s|^|#|'
-e '\@require.*simplecov@,\@^end$@d'
# Remove minitest-reporters. It does not provide any additional value while
# it blows up the dependency chain.
@ -223,23 +240,19 @@ sed -i '/require..minitest.reporters./ s/^/#/' test/helper.rb
sed -i '/Minitest::Reporters/ s/^/#/' test/helper.rb
# PPC64LE with ruby3.1 does not seem to support GC.compact
# (On Fedora, the above is backported to 3.0 branch)
%ifarch ppc64le
export NOKOGIRI_TEST_GC_LEVEL=major
%endif
%ifarch s390x
# With ruby 3.2 GC_LEVEL=compact seems to cause segfault:
# change to major for now
if pkg-config --atleast-version 3.2 ruby ; then
export NOKOGIRI_TEST_GC_LEVEL=major
fi
%endif
# Need investigation. For now anyway build
env \
RUBYLIB=".:lib:test:%{buildroot}%{gem_extdir_mri}" \
RUBYLIB=".:lib:test:ext" \
ruby \
-e \
"require 'test/helper' ; Dir.glob('test/**/test_*.rb'){|f| require f}" || \
exit 1
echo "Please investigate this"
for f in $SKIPTEST
do
@ -253,9 +266,7 @@ popd
%{gem_extdir_mri}/
%dir %{gem_instdir}/
%license %{gem_instdir}/LICENSE*.md
%doc %{gem_instdir}/CHANGELOG.md
%doc %{gem_instdir}/README.md
%doc %{gem_instdir}/[A-Z]*
%{gem_instdir}/bin/
%{gem_instdir}/lib/
@ -263,223 +274,23 @@ popd
%dir %{gem_instdir}/gumbo-parser
%dir %{gem_instdir}/gumbo-parser/src
%doc %{gem_instdir}/gumbo-parser/[A-Z]*
%license %{gem_instdir}/gumbo-parser/src/README.md
%doc %{gem_instdir}/gumbo-parser/src/README.md
%{gem_dir}/specifications/%{gem_name}-%{mainver}%{?prever}.gemspec
%files doc
%defattr(-,root,root,-)
%doc %{gem_instdir}/CODE_OF_CONDUCT.md
%doc %{gem_instdir}/CONTRIBUTING.md
%doc %{gem_instdir}/ROADMAP.md
%doc %{gem_instdir}/SECURITY.md
%doc %{gem_dir}/doc/%{gem_name}-%{mainver}%{?prever}/
%{gem_dir}/doc/%{gem_name}-%{mainver}%{?prever}/
%changelog
* Thu Jan 08 2026 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.19.0-2
- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_4.0
* Fri Jun 3 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.1-4
- Make test suite pass with libxml2 2.9.14
* Tue Dec 30 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.19.0-1
- 1.19.0
* Tue May 10 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.1-3
- Backport CVE-2022-29181 from between 1.13.5 and 1.13.6
* Wed Dec 24 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.10-2
- Handle minitest 6 compatibility
* Mon Sep 15 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.10-1
- 1.18.10
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.18.9-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Mon Jul 21 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.9-1
- 1.18.9
* Wed Apr 23 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.8-1
- 1.18.8
* Mon Apr 07 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.7-1
- 1.18.7
* Sat Mar 29 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.6-1
- 1.18.6
* Wed Mar 26 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.5-2
- Suppress warnings from Nokogiri::VERSION_INFO (bug 2354787)
* Thu Mar 20 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.5-1
- 1.18.5
* Sun Mar 16 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.4-1
- 1.18.4
* Wed Feb 19 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.3-1
- 1.18.3
* Mon Jan 20 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.2-1
- 1.18.2
* Sat Jan 18 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.18.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Tue Jan 07 2025 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.1-2
- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.4
* Mon Dec 30 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.1-1
- 1.18.1
* Sat Dec 28 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.18.0-1
- 1.18.0
* Fri Dec 13 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.17.2-1
- 1.17.2
* Wed Dec 11 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.17.1-1
- 1.17.1
* Mon Dec 09 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.17.0-1
- 1.17.0
* Thu Dec 05 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.8-1
- 1.16.8
* Wed Jul 31 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.7-1
- 1.16.7
* Fri Jul 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.16.6-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Sun Jun 16 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.6-1
- 1.16.6
* Tue May 14 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.5-1
- 1.16.5
* Thu Apr 25 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.4-2
- Make rubygem-minizip testsuite dependency optional, drop on RHEL
(Patch by Jun Aruga <jaruga@redhat.com>)
* Thu Apr 11 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.4-1
- 1.16.4
* Sun Mar 17 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.3-1
- 1.16.3
* Mon Feb 05 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.2-1
- 1.16.2
* Sun Feb 04 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.1-1
- 1.16.1
* Fri Jan 26 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.16.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Jan 03 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.0-2
- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.3
* Fri Dec 29 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.16.0-1
- 1.16.0
* Sat Nov 18 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.15.5-1
- 1.15.5
- Backport upstream patch for libxml2 2.12.0 error handling change
* Sat Aug 12 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.15.4-1
- 1.15.4
* Sun Aug 6 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.15.3-4
- Prefer upstream patch for the previous change
* Fri Aug 4 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.15.3-3
- Support MiniTest 5.19+
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.15.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Thu Jul 6 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.15.3-1
- 1.15.3
* Thu May 25 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.15.2-1
- 1.15.2
* Sun May 21 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.15.1-1
- 1.15.1
* Tue May 16 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.15.0-1
- 1.15.0
* Fri May 12 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.14.4-1
- 1.14.4
- Note that CVE-2022-34169 is for vendored xalan-j, not affecting Fedora
nokogiri
* Wed Apr 12 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.14.3-1
- 1.14.3
- SPDX confirmed
* Tue Feb 14 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.14.2-1
- 1.14.2
* Tue Jan 31 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.14.1-1
- 1.14.1
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.14.0-1.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Sun Jan 15 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.14.0-1
- 1.14.0
* Tue Jan 03 2023 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.10-2.1
- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.2
* Sun Dec 25 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.10-2
- Use %%gem_extdir_mri instead of ext for %%check due to ruby3.2 change
for ext cleanup during build
* Fri Dec 9 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.10-1
- 1.13.10
- Address CVE-2022-23476
* Thu Oct 20 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.9-2
- s390x: change GC_LEVEL to major on ruby3.2 for now
* Thu Oct 20 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.9-1
- 1.13.9
* Wed Jul 27 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.8-1
- 1.13.8
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.7-2.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Wed Jul 13 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.7-2
- Bump release
* Wed Jul 13 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.7-1
- 1.13.7
* Tue May 10 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.6-1
- 1.13.6
- Addresses CVE-2022-29181
* Thu May 5 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.5-1
- 1.13.5
* Thu Apr 14 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.4-1
- 1.13.4
- Addresses CVE-2022-24836
* Tue Feb 22 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.3-1
- 1.13.3
* Wed Jan 26 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.1-2
- Set NOKOGIRI_TEST_GC_LEVEL to major on ppc64le as
ruby31 does not seem to support GC.compat on the platform
* Wed Jan 26 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.1-1.2
- F-36: rebuild against ruby31
* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.1-1.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Thu Apr 14 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.1-2
- Backport CVE-2022-24836 from between 1.13.3 and 1.13.4
* Fri Jan 14 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 1.13.1-1
- 1.13.1

View file

@ -1,2 +1,2 @@
SHA512 (rubygem-nokogiri-1.19.0-full.tar.gz) = 29dd894b176857d55eb5e670f50e69762e74c0a13e6949030af17e3c84b65f9dfe0087210b84a7c77749d3d1a4a33292d62f7005003745e8f087d822ee64f4b1
SHA512 (nokogiri-1.19.0.gem) = d9326a2e60b6ea3152c5f9d53df738610f18ca57cffcd3bf2f8b07a2b08b30085d0fce2ca8206279ad6a0f1a613e9e76821c09aef45cf5e5b2d00ff766734872
SHA512 (nokogiri-1.13.1.gem) = 0ed89f53cdb6097c435856ddfa55eeef972a1e33d4e6db2fb8fc66f48827e2f863155b9468fc7cd1c17a7d1a5e2ce8adb91299e4425123034e823b74190cff26
SHA512 (rubygem-nokogiri-1.13.1-full.tar.gz) = 6beb9a840baf40488245c58088d692e6df7d936b0866ddd4db8575855175b984992cad692d1b7e451dc0a4cbc5dbc9e7f0d6f3936da15a86a0d9abb5e28ef577