nokogiri 1.16.0.rc1-x86-mingw32 → 1.16.1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad1d3852369d8539242e08228539f984e704e7f9b43b38a653f46faef1834f21
4
- data.tar.gz: cc6bc3ad4a8336c3ca013cf858d41fb0bbf210ec8958f55081039ee9be5b3ec8
3
+ metadata.gz: 1490b27492cbf89d8c6a563416979e823685805917fe6153e794961536eb742e
4
+ data.tar.gz: 552e5129f01f867ec081db8e99b34125c43795b766d8fcaa9acf581d3e4ce79f
5
5
  SHA512:
6
- metadata.gz: 720f9547d72e421c830aceed387f5f85e0ac28c4458c3b0b77684b910608ef85b97e29661e61efe3dc08981b2c7c4ff408b9a39ee7c6e361463f1de737c1d504
7
- data.tar.gz: c54a795dd7457e046262643b8315264acd2d3720422cdb85dee6c3c7de0c9e681d2b7f3c31b160d8a1ed1e69f17951737d42c6ff2a47ca454a45384c4db56353
6
+ metadata.gz: d3f7f7c80ec831474b40d2a81efd8de61d5711e83bbab7d15d658c207ae03ce6895cbeb79c5e05b568a41324b939e25b71a51eafe79a8bffe6c984f382aac571
7
+ data.tar.gz: 031ca4b1ad24284c533dbcfefafe9019a3389670c0906502cea443f9a4863f2a44aad0043ede9e7c006853cab4d2534508b970730e11d36d70ae4c69b8dd9726
data/Gemfile CHANGED
@@ -5,30 +5,36 @@ source "https://rubygems.org"
5
5
  gemspec
6
6
 
7
7
  group :development do
8
+ # ruby 3.4.0-dev removed some gems from the default set
9
+ #
10
+ # TODO: we should be able to remove these as our gem dependencies sort it out and we pull them in
11
+ # transitively.
12
+ gem "mutex_m"
13
+
8
14
  # bootstrapping
9
15
  gem "bundler", "~> 2.3"
10
16
  gem "rake", "13.1.0"
11
17
 
12
18
  # building extensions
13
- gem "rake-compiler", "1.2.5"
14
- gem "rake-compiler-dock", "1.4.0.rc2"
19
+ gem "rake-compiler", "1.2.6"
20
+ gem "rake-compiler-dock", "1.4.0"
15
21
 
16
22
  # parser generator
17
23
  gem "rexical", "= 1.0.7"
18
24
 
19
25
  # tests
20
- gem "minitest", "5.20.0"
26
+ gem "minitest", "5.21.2"
21
27
  gem "minitest-parallel_fork", "2.0.0"
22
- gem "ruby_memcheck", "2.2.1"
28
+ gem "ruby_memcheck", "2.3.0"
23
29
  gem "rubyzip", "~> 2.3.2"
24
30
  gem "simplecov", "= 0.21.2"
25
31
 
26
32
  # rubocop
27
33
  if Gem::Requirement.new("~> 3.0").satisfied_by?(Gem::Version.new(RUBY_VERSION))
28
- gem "rubocop", "1.58.0"
29
- gem "rubocop-minitest", "0.33.0"
34
+ gem "rubocop", "1.60.2"
35
+ gem "rubocop-minitest", "0.34.5"
30
36
  gem "rubocop-packaging", "0.5.2"
31
- gem "rubocop-performance", "1.19.1"
37
+ gem "rubocop-performance", "1.20.2"
32
38
  gem "rubocop-rake", "= 0.6.0"
33
39
  gem "rubocop-shopify", "2.14.0"
34
40
  end
@@ -38,5 +44,5 @@ end
38
44
  # `bundle config set --local without rdoc`
39
45
  # Then re-run `bundle install`.
40
46
  group :rdoc do
41
- gem "rdoc", "6.6.1"
47
+ gem "rdoc", "6.6.2"
42
48
  end
data/README.md CHANGED
@@ -55,6 +55,7 @@ There are a few ways to ask exploratory questions:
55
55
 
56
56
  - The Nokogiri mailing list is active at https://groups.google.com/group/nokogiri-talk
57
57
  - Open an issue using the "Help Request" template at https://github.com/sparklemotion/nokogiri/issues
58
+ - Open a discussion at https://github.com/sparklemotion/nokogiri/discussions
58
59
 
59
60
  Please do not mail the maintainers at their personal addresses.
60
61
 
@@ -90,6 +91,8 @@ We bump `Major.Minor.Patch` versions following this guidance:
90
91
  - Updating packaged libraries for non-security-related reasons.
91
92
  - Dropping support for EOLed Ruby versions. [Some folks find this objectionable](https://github.com/sparklemotion/nokogiri/issues/1568), but [SemVer says this is OK if the public API hasn't changed](https://semver.org/#what-should-i-do-if-i-update-my-own-dependencies-without-changing-the-public-api).
92
93
  - Backwards-incompatible changes to internal or private methods and constants. These are detailed in the "Changes" section of each changelog entry.
94
+ - Removal of deprecated methods or parameters, after a generous transition period; usually when those methods or parameters are rarely-used or dangerous to the user. Essentially, removals that do not justify a major version bump.
95
+
93
96
 
94
97
  `Patch`:
95
98
 
data/dependencies.yml CHANGED
@@ -1,8 +1,8 @@
1
1
 
2
2
  libxml2:
3
- version: "2.12.3"
4
- sha256: "8c8f1092340a89ff32bc44ad5c9693aff9bc8a7a3e161bb239666e5d15ac9aaa"
5
- # sha-256 hash provided in https://download.gnome.org/sources/libxml2/2.12/libxml2-2.12.3.sha256sum
3
+ version: "2.12.4"
4
+ sha256: "497360e423cf0bd99eacdb7c6215dea92e6d6e89ee940393c2bae0e77cb9b7d0"
5
+ # sha-256 hash provided in https://download.gnome.org/sources/libxml2/2.12/libxml2-2.12.4.sha256sum
6
6
 
7
7
  libxslt:
8
8
  version: "1.1.39"
@@ -859,10 +859,16 @@ XMLPUBFUN const char *const *__xmlParserVersion(void);
859
859
  XML_OP(xmlLoadExtDtdDefaultValue, int, XML_DEPRECATED) \
860
860
  XML_OP(xmlParserDebugEntities, int, XML_DEPRECATED) \
861
861
  XML_OP(xmlPedanticParserDefaultValue, int, XML_DEPRECATED) \
862
- XML_OP(xmlSubstituteEntitiesDefaultValue, int, XML_DEPRECATED) \
863
- XML_OP(xmlIndentTreeOutput, int, XML_NO_ATTR) \
864
- XML_OP(xmlTreeIndentString, const char *, XML_NO_ATTR) \
865
- XML_OP(xmlSaveNoEmptyTags, int, XML_NO_ATTR)
862
+ XML_OP(xmlSubstituteEntitiesDefaultValue, int, XML_DEPRECATED)
863
+
864
+ #ifdef LIBXML_OUTPUT_ENABLED
865
+ #define XML_GLOBALS_PARSER_OUTPUT \
866
+ XML_OP(xmlIndentTreeOutput, int, XML_NO_ATTR) \
867
+ XML_OP(xmlTreeIndentString, const char *, XML_NO_ATTR) \
868
+ XML_OP(xmlSaveNoEmptyTags, int, XML_NO_ATTR)
869
+ #else
870
+ #define XML_GLOBALS_PARSER_OUTPUT
871
+ #endif
866
872
 
867
873
  #ifdef LIBXML_SAX1_ENABLED
868
874
  #define XML_GLOBALS_PARSER_SAX1 \
@@ -873,6 +879,7 @@ XMLPUBFUN const char *const *__xmlParserVersion(void);
873
879
 
874
880
  #define XML_GLOBALS_PARSER \
875
881
  XML_GLOBALS_PARSER_CORE \
882
+ XML_GLOBALS_PARSER_OUTPUT \
876
883
  XML_GLOBALS_PARSER_SAX1
877
884
 
878
885
  #define XML_OP XML_DECLARE_GLOBAL
@@ -896,9 +903,11 @@ XML_GLOBALS_PARSER
896
903
  XML_GLOBAL_MACRO(xmlPedanticParserDefaultValue)
897
904
  #define xmlSubstituteEntitiesDefaultValue \
898
905
  XML_GLOBAL_MACRO(xmlSubstituteEntitiesDefaultValue)
899
- #define xmlIndentTreeOutput XML_GLOBAL_MACRO(xmlIndentTreeOutput)
900
- #define xmlTreeIndentString XML_GLOBAL_MACRO(xmlTreeIndentString)
901
- #define xmlSaveNoEmptyTags XML_GLOBAL_MACRO(xmlSaveNoEmptyTags)
906
+ #ifdef LIBXML_OUTPUT_ENABLED
907
+ #define xmlIndentTreeOutput XML_GLOBAL_MACRO(xmlIndentTreeOutput)
908
+ #define xmlTreeIndentString XML_GLOBAL_MACRO(xmlTreeIndentString)
909
+ #define xmlSaveNoEmptyTags XML_GLOBAL_MACRO(xmlSaveNoEmptyTags)
910
+ #endif
902
911
  #endif
903
912
  /** DOC_ENABLE */
904
913
 
@@ -218,7 +218,6 @@ XMLPUBFUN xmlParserInputBufferPtr
218
218
  XMLPUBFUN xmlParserInputBufferPtr
219
219
  xmlParserInputBufferCreateMem (const char *mem, int size,
220
220
  xmlCharEncoding enc);
221
- XML_DEPRECATED
222
221
  XMLPUBFUN xmlParserInputBufferPtr
223
222
  xmlParserInputBufferCreateStatic (const char *mem, int size,
224
223
  xmlCharEncoding enc);
@@ -29,21 +29,21 @@ XMLPUBFUN void xmlCheckVersion(int version);
29
29
  *
30
30
  * the version string like "1.2.3"
31
31
  */
32
- #define LIBXML_DOTTED_VERSION "2.12.3"
32
+ #define LIBXML_DOTTED_VERSION "2.12.4"
33
33
 
34
34
  /**
35
35
  * LIBXML_VERSION:
36
36
  *
37
37
  * the version number: 1.2.3 value is 10203
38
38
  */
39
- #define LIBXML_VERSION 21203
39
+ #define LIBXML_VERSION 21204
40
40
 
41
41
  /**
42
42
  * LIBXML_VERSION_STRING:
43
43
  *
44
44
  * the version number string, 1.2.3 value is "10203"
45
45
  */
46
- #define LIBXML_VERSION_STRING "21203"
46
+ #define LIBXML_VERSION_STRING "21204"
47
47
 
48
48
  /**
49
49
  * LIBXML_VERSION_EXTRA:
@@ -58,7 +58,7 @@ XMLPUBFUN void xmlCheckVersion(int version);
58
58
  * Macro to check that the libxml version in use is compatible with
59
59
  * the version the software has been compiled against
60
60
  */
61
- #define LIBXML_TEST_VERSION xmlCheckVersion(21203);
61
+ #define LIBXML_TEST_VERSION xmlCheckVersion(21204);
62
62
 
63
63
  #ifndef VMS
64
64
  #if 0
@@ -74,8 +74,10 @@ dealloc(void *data)
74
74
 
75
75
  ruby_xfree(doc->_private);
76
76
 
77
+ #if defined(__GNUC__) && __GNUC__ >= 5
77
78
  #pragma GCC diagnostic push
78
79
  #pragma GCC diagnostic ignored "-Wdeprecated-declarations" // xmlDeregisterNodeDefault is deprecated as of libxml2 2.11.0
80
+ #endif
79
81
  /*
80
82
  * libxml-ruby < 3.0.0 uses xmlDeregisterNodeDefault. If the user is using one of those older
81
83
  * versions, the registered callback from libxml-ruby will access the _private pointers set by
@@ -90,7 +92,9 @@ dealloc(void *data)
90
92
  if (xmlDeregisterNodeDefaultValue) {
91
93
  remove_private((xmlNodePtr)doc);
92
94
  }
95
+ #if defined(__GNUC__) && __GNUC__ >= 5
93
96
  #pragma GCC diagnostic pop
97
+ #endif
94
98
 
95
99
  xmlFreeDoc(doc);
96
100
  }
@@ -5,8 +5,14 @@ VALUE cNokogiriXmlReader;
5
5
  static void
6
6
  xml_reader_deallocate(void *data)
7
7
  {
8
+ // free the document separately because we _may_ have triggered preservation by calling
9
+ // xmlTextReaderCurrentDoc during a read_more.
8
10
  xmlTextReaderPtr reader = data;
11
+ xmlDocPtr doc = xmlTextReaderCurrentDoc(reader);
9
12
  xmlFreeTextReader(reader);
13
+ if (doc) {
14
+ xmlFreeDoc(doc);
15
+ }
10
16
  }
11
17
 
12
18
  static const rb_data_type_t xml_reader_type = {
@@ -515,6 +521,7 @@ read_more(VALUE self)
515
521
  xmlErrorConstPtr error;
516
522
  VALUE error_list;
517
523
  int ret;
524
+ xmlDocPtr c_document;
518
525
 
519
526
  TypedData_Get_Struct(self, xmlTextReader, &xml_reader_type, reader);
520
527
 
@@ -524,6 +531,16 @@ read_more(VALUE self)
524
531
  ret = xmlTextReaderRead(reader);
525
532
  xmlSetStructuredErrorFunc(NULL, NULL);
526
533
 
534
+ c_document = xmlTextReaderCurrentDoc(reader);
535
+ if (c_document && c_document->encoding == NULL) {
536
+ VALUE constructor_encoding = rb_iv_get(self, "@encoding");
537
+ if (RTEST(constructor_encoding)) {
538
+ c_document->encoding = xmlStrdup(BAD_CAST StringValueCStr(constructor_encoding));
539
+ } else {
540
+ c_document->encoding = xmlStrdup(BAD_CAST "UTF-8");
541
+ }
542
+ }
543
+
527
544
  if (ret == 1) { return self; }
528
545
  if (ret == 0) { return Qnil; }
529
546
 
@@ -707,15 +724,18 @@ rb_xml_reader_encoding(VALUE rb_reader)
707
724
  const char *parser_encoding;
708
725
  VALUE constructor_encoding;
709
726
 
727
+ TypedData_Get_Struct(rb_reader, xmlTextReader, &xml_reader_type, c_reader);
728
+ parser_encoding = (const char *)xmlTextReaderConstEncoding(c_reader);
729
+ if (parser_encoding) {
730
+ return NOKOGIRI_STR_NEW2(parser_encoding);
731
+ }
732
+
710
733
  constructor_encoding = rb_iv_get(rb_reader, "@encoding");
711
734
  if (RTEST(constructor_encoding)) {
712
735
  return constructor_encoding;
713
736
  }
714
737
 
715
- TypedData_Get_Struct(rb_reader, xmlTextReader, &xml_reader_type, c_reader);
716
- parser_encoding = (const char *)xmlTextReaderConstEncoding(c_reader);
717
- if (parser_encoding == NULL) { return Qnil; }
718
- return NOKOGIRI_STR_NEW2(parser_encoding);
738
+ return Qnil;
719
739
  }
720
740
 
721
741
  void
@@ -59,6 +59,10 @@ parse_io(VALUE klass, VALUE io, VALUE encoding)
59
59
  (xmlInputReadCallback)noko_io_read,
60
60
  (xmlInputCloseCallback)noko_io_close,
61
61
  (void *)io, enc);
62
+ if (!ctxt) {
63
+ rb_raise(rb_eRuntimeError, "failed to create xml sax parser context");
64
+ }
65
+
62
66
  if (ctxt->sax) {
63
67
  xmlFree(ctxt->sax);
64
68
  ctxt->sax = NULL;
@@ -71,7 +71,12 @@ Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
71
71
  * call-seq:
72
72
  * parse_stylesheet_doc(document)
73
73
  *
74
- * Parse a stylesheet from +document+.
74
+ * Parse an XSLT::Stylesheet from +document+.
75
+ *
76
+ * [Parameters]
77
+ * - +document+ (Nokogiri::XML::Document) the document to be parsed.
78
+ *
79
+ * [Returns] Nokogiri::XSLT::Stylesheet
75
80
  */
76
81
  static VALUE
77
82
  parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
@@ -104,7 +109,7 @@ parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
104
109
  * call-seq:
105
110
  * serialize(document)
106
111
  *
107
- * Serialize +document+ to an xml string.
112
+ * Serialize +document+ to an xml string, as specified by the +method+ parameter in the Stylesheet.
108
113
  */
109
114
  static VALUE
110
115
  rb_xslt_stylesheet_serialize(VALUE self, VALUE xmlobj)
@@ -133,7 +138,7 @@ rb_xslt_stylesheet_serialize(VALUE self, VALUE xmlobj)
133
138
  * transform(document)
134
139
  * transform(document, params = {})
135
140
  *
136
- * Apply an XSLT stylesheet to an XML::Document.
141
+ * Transform an XML::Document as defined by an XSLT::Stylesheet.
137
142
  *
138
143
  * [Parameters]
139
144
  * - +document+ (Nokogiri::XML::Document) the document to be transformed.
@@ -13,6 +13,9 @@ LDFLAGS := -pthread
13
13
 
14
14
  all: check
15
15
 
16
+ oss-fuzz:
17
+ ./fuzzer/build-ossfuzz.sh
18
+
16
19
  fuzzers: fuzzer-normal fuzzer-asan fuzzer-ubsan fuzzer-msan
17
20
 
18
21
  fuzzer-normal:
Binary file
Binary file
Binary file
Binary file
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Nokogiri
4
4
  # The version of Nokogiri you are using
5
- VERSION = "1.16.0.rc1"
5
+ VERSION = "1.16.1"
6
6
  end
@@ -1049,29 +1049,35 @@ module Nokogiri
1049
1049
 
1050
1050
  return Nokogiri::XML::NodeSet.new(document) if contents.empty?
1051
1051
 
1052
- # libxml2 does not obey the +recover+ option after encountering errors during +in_context+
1053
- # parsing, and so this horrible hack is here to try to emulate recovery behavior.
1054
- #
1055
- # Unfortunately, this means we're no longer parsing "in context" and so namespaces that
1056
- # would have been inherited from the context node won't be handled correctly. This hack was
1057
- # written in 2010, and I regret it, because it's silently degrading functionality in a way
1058
- # that's not easily prevented (or even detected).
1059
- #
1060
- # I think preferable behavior would be to either:
1061
- #
1062
- # a. add an error noting that we "fell back" and pointing the user to turning off the +recover+ option
1063
- # b. don't recover, but raise a sensible exception
1064
- #
1065
- # For context and background: https://github.com/sparklemotion/nokogiri/issues/313
1066
- # FIXME bug report: https://github.com/sparklemotion/nokogiri/issues/2092
1067
1052
  error_count = document.errors.length
1068
1053
  node_set = in_context(contents, options.to_i)
1069
- if node_set.empty? && (document.errors.length > error_count)
1070
- if options.recover?
1054
+ if document.errors.length > error_count
1055
+ raise document.errors[error_count] unless options.recover?
1056
+
1057
+ if node_set.empty?
1058
+ # libxml2 < 2.13 does not obey the +recover+ option after encountering errors during
1059
+ # +in_context+ parsing, and so this horrible hack is here to try to emulate recovery
1060
+ # behavior.
1061
+ #
1062
+ # (Note that HTML4 fragment parsing seems to have been fixed in abd74186, and XML
1063
+ # fragment parsing is fixed in 1c106edf. Both are in 2.13.)
1064
+ #
1065
+ # Unfortunately, this means we're no longer parsing "in context" and so namespaces that
1066
+ # would have been inherited from the context node won't be handled correctly. This hack
1067
+ # was written in 2010, and I regret it, because it's silently degrading functionality in
1068
+ # a way that's not easily prevented (or even detected).
1069
+ #
1070
+ # I think preferable behavior would be to either:
1071
+ #
1072
+ # a. add an error noting that we "fell back" and pointing the user to turning off the
1073
+ # +recover+ option
1074
+ # b. don't recover, but raise a sensible exception
1075
+ #
1076
+ # For context and background:
1077
+ # - https://github.com/sparklemotion/nokogiri/issues/313
1078
+ # - https://github.com/sparklemotion/nokogiri/issues/2092
1071
1079
  fragment = document.related_class("DocumentFragment").parse(contents)
1072
1080
  node_set = fragment.children
1073
- else
1074
- raise document.errors[error_count]
1075
1081
  end
1076
1082
  end
1077
1083
  node_set
@@ -3,9 +3,11 @@
3
3
  module Nokogiri
4
4
  module XML
5
5
  ###
6
- # Nokogiri::XML::Reader parses an XML document similar to the way a cursor
7
- # would move. The Reader is given an XML document, and yields nodes
8
- # to an each block.
6
+ # Nokogiri::XML::Reader parses an XML document similar to the way a cursor would move. The
7
+ # Reader is given an XML document, and yields nodes to an each block.
8
+ #
9
+ # The Reader parser might be good for when you need the speed and low memory usage of the SAX
10
+ # parser, but do not want to write a Document handler.
9
11
  #
10
12
  # Here is an example of usage:
11
13
  #
@@ -22,13 +24,12 @@ module Nokogiri
22
24
  #
23
25
  # end
24
26
  #
25
- # Note that Nokogiri::XML::Reader#each can only be called once!! Once
26
- # the cursor moves through the entire document, you must parse the
27
- # document again. So make sure that you capture any information you
28
- # need during the first iteration.
27
+ # Nokogiri::XML::Reader#each can only be called once! Once the cursor moves through the entire
28
+ # document, you must parse the document again. It may be better to capture all information you
29
+ # need during a single iteration.
29
30
  #
30
- # The Reader parser is good for when you need the speed of a SAX parser,
31
- # but do not want to write a Document handler.
31
+ # libxml2 does not support error recovery in the Reader parser. The `RECOVER` ParseOption is
32
+ # ignored. If a syntax error is encountered during parsing, an exception will be raised.
32
33
  class Reader
33
34
  include Enumerable
34
35
 
@@ -10,15 +10,37 @@ module Nokogiri
10
10
  # doc = Nokogiri::XML(File.read('some_file.xml'))
11
11
  # xslt = Nokogiri::XSLT(File.read('some_transformer.xslt'))
12
12
  #
13
- # puts xslt.transform(doc)
13
+ # xslt.transform(doc) # => Nokogiri::XML::Document
14
14
  #
15
- # See Nokogiri::XSLT::Stylesheet#transform for more transformation
16
- # information.
15
+ # Many XSLT transformations include serialization behavior to emit a non-XML document. For these
16
+ # cases, please take care to invoke the #serialize method on the result of the transformation:
17
+ #
18
+ # doc = Nokogiri::XML(File.read('some_file.xml'))
19
+ # xslt = Nokogiri::XSLT(File.read('some_transformer.xslt'))
20
+ # xslt.serialize(xslt.transform(doc)) # => String
21
+ #
22
+ # or use the #apply_to method, which is a shortcut for `serialize(transform(document))`:
23
+ #
24
+ # doc = Nokogiri::XML(File.read('some_file.xml'))
25
+ # xslt = Nokogiri::XSLT(File.read('some_transformer.xslt'))
26
+ # xslt.apply_to(doc) # => String
27
+ #
28
+ # See Nokogiri::XSLT::Stylesheet#transform for more information and examples.
17
29
  class Stylesheet
18
- ###
19
- # Apply an XSLT stylesheet to an XML::Document.
20
- # +params+ is an array of strings used as XSLT parameters.
21
- # returns serialized document
30
+ # :call-seq:
31
+ # apply_to(document, params = []) -> String
32
+ #
33
+ # Apply an XSLT stylesheet to an XML::Document and serialize it properly. This method is
34
+ # equivalent to calling #serialize on the result of #transform.
35
+ #
36
+ # [Parameters]
37
+ # - +document+ is an instance of XML::Document to transform
38
+ # - +params+ is an array of strings used as XSLT parameters, passed into #transform
39
+ #
40
+ # [Returns]
41
+ # A string containing the serialized result of the transformation.
42
+ #
43
+ # See Nokogiri::XSLT::Stylesheet#transform for more information and examples.
22
44
  def apply_to(document, params = [])
23
45
  serialize(transform(document, params))
24
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nokogiri
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.0.rc1
4
+ version: 1.16.1
5
5
  platform: x86-mingw32
6
6
  authors:
7
7
  - Mike Dalessio
@@ -20,7 +20,7 @@ authors:
20
20
  autorequire:
21
21
  bindir: bin
22
22
  cert_chain: []
23
- date: 2023-12-13 00:00:00.000000000 Z
23
+ date: 2024-02-03 00:00:00.000000000 Z
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: racc
@@ -307,9 +307,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
307
307
  version: 3.4.dev
308
308
  required_rubygems_version: !ruby/object:Gem::Requirement
309
309
  requirements:
310
- - - ">"
310
+ - - ">="
311
311
  - !ruby/object:Gem::Version
312
- version: 1.3.1
312
+ version: '0'
313
313
  requirements: []
314
314
  rubygems_version: 3.3.26
315
315
  signing_key: