nokogiri 1.10.0 → 1.11.1

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.

Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/LICENSE-DEPENDENCIES.md +1015 -947
  4. data/README.md +178 -90
  5. data/dependencies.yml +28 -26
  6. data/ext/nokogiri/depend +476 -357
  7. data/ext/nokogiri/extconf.rb +508 -354
  8. data/ext/nokogiri/html_document.c +79 -78
  9. data/ext/nokogiri/html_sax_parser_context.c +4 -2
  10. data/ext/nokogiri/html_sax_push_parser.c +14 -8
  11. data/ext/nokogiri/nokogiri.c +37 -40
  12. data/ext/nokogiri/nokogiri.h +26 -17
  13. data/ext/nokogiri/test_global_handlers.c +41 -0
  14. data/ext/nokogiri/xml_document.c +18 -4
  15. data/ext/nokogiri/xml_io.c +8 -6
  16. data/ext/nokogiri/xml_node.c +23 -6
  17. data/ext/nokogiri/xml_node_set.c +1 -1
  18. data/ext/nokogiri/xml_reader.c +6 -17
  19. data/ext/nokogiri/xml_relax_ng.c +29 -11
  20. data/ext/nokogiri/xml_sax_parser.c +2 -7
  21. data/ext/nokogiri/xml_sax_parser_context.c +4 -2
  22. data/ext/nokogiri/xml_sax_push_parser.c +2 -0
  23. data/ext/nokogiri/xml_schema.c +84 -13
  24. data/ext/nokogiri/xml_syntax_error.c +23 -0
  25. data/ext/nokogiri/xml_syntax_error.h +15 -3
  26. data/ext/nokogiri/xml_xpath_context.c +80 -4
  27. data/ext/nokogiri/xslt_stylesheet.c +2 -9
  28. data/lib/nokogiri.rb +22 -22
  29. data/lib/nokogiri/css.rb +1 -0
  30. data/lib/nokogiri/css/node.rb +1 -0
  31. data/lib/nokogiri/css/parser.rb +63 -62
  32. data/lib/nokogiri/css/parser.y +2 -2
  33. data/lib/nokogiri/css/parser_extras.rb +39 -36
  34. data/lib/nokogiri/css/syntax_error.rb +1 -0
  35. data/lib/nokogiri/css/tokenizer.rb +105 -103
  36. data/lib/nokogiri/css/xpath_visitor.rb +73 -43
  37. data/lib/nokogiri/decorators/slop.rb +1 -0
  38. data/lib/nokogiri/html.rb +1 -0
  39. data/lib/nokogiri/html/builder.rb +1 -0
  40. data/lib/nokogiri/html/document.rb +13 -26
  41. data/lib/nokogiri/html/document_fragment.rb +1 -0
  42. data/lib/nokogiri/html/element_description.rb +1 -0
  43. data/lib/nokogiri/html/element_description_defaults.rb +1 -0
  44. data/lib/nokogiri/html/entity_lookup.rb +1 -0
  45. data/lib/nokogiri/html/sax/parser.rb +1 -0
  46. data/lib/nokogiri/html/sax/parser_context.rb +1 -0
  47. data/lib/nokogiri/html/sax/push_parser.rb +1 -0
  48. data/lib/nokogiri/jruby/dependencies.rb +20 -0
  49. data/lib/nokogiri/syntax_error.rb +1 -0
  50. data/lib/nokogiri/version.rb +3 -109
  51. data/lib/nokogiri/version/constant.rb +5 -0
  52. data/lib/nokogiri/version/info.rb +182 -0
  53. data/lib/nokogiri/xml.rb +1 -0
  54. data/lib/nokogiri/xml/attr.rb +1 -0
  55. data/lib/nokogiri/xml/attribute_decl.rb +1 -0
  56. data/lib/nokogiri/xml/builder.rb +36 -32
  57. data/lib/nokogiri/xml/cdata.rb +1 -0
  58. data/lib/nokogiri/xml/character_data.rb +1 -0
  59. data/lib/nokogiri/xml/document.rb +21 -16
  60. data/lib/nokogiri/xml/document_fragment.rb +5 -6
  61. data/lib/nokogiri/xml/dtd.rb +1 -0
  62. data/lib/nokogiri/xml/element_content.rb +1 -0
  63. data/lib/nokogiri/xml/element_decl.rb +1 -0
  64. data/lib/nokogiri/xml/entity_decl.rb +1 -0
  65. data/lib/nokogiri/xml/entity_reference.rb +1 -0
  66. data/lib/nokogiri/xml/namespace.rb +1 -0
  67. data/lib/nokogiri/xml/node.rb +588 -250
  68. data/lib/nokogiri/xml/node/save_options.rb +1 -0
  69. data/lib/nokogiri/xml/node_set.rb +43 -8
  70. data/lib/nokogiri/xml/notation.rb +1 -0
  71. data/lib/nokogiri/xml/parse_options.rb +10 -3
  72. data/lib/nokogiri/xml/pp.rb +1 -0
  73. data/lib/nokogiri/xml/pp/character_data.rb +1 -0
  74. data/lib/nokogiri/xml/pp/node.rb +1 -0
  75. data/lib/nokogiri/xml/processing_instruction.rb +1 -0
  76. data/lib/nokogiri/xml/reader.rb +7 -3
  77. data/lib/nokogiri/xml/relax_ng.rb +7 -2
  78. data/lib/nokogiri/xml/sax.rb +1 -0
  79. data/lib/nokogiri/xml/sax/document.rb +1 -0
  80. data/lib/nokogiri/xml/sax/parser.rb +1 -0
  81. data/lib/nokogiri/xml/sax/parser_context.rb +1 -0
  82. data/lib/nokogiri/xml/sax/push_parser.rb +1 -0
  83. data/lib/nokogiri/xml/schema.rb +13 -4
  84. data/lib/nokogiri/xml/searchable.rb +25 -16
  85. data/lib/nokogiri/xml/syntax_error.rb +1 -0
  86. data/lib/nokogiri/xml/text.rb +1 -0
  87. data/lib/nokogiri/xml/xpath.rb +1 -0
  88. data/lib/nokogiri/xml/xpath/syntax_error.rb +1 -0
  89. data/lib/nokogiri/xml/xpath_context.rb +1 -0
  90. data/lib/nokogiri/xslt.rb +1 -0
  91. data/lib/nokogiri/xslt/stylesheet.rb +1 -0
  92. data/lib/xsd/xmlparser/nokogiri.rb +1 -0
  93. data/patches/libxml2/0002-Remove-script-macro-support.patch +40 -0
  94. data/patches/libxml2/0003-Update-entities-to-remove-handling-of-ssi.patch +44 -0
  95. data/patches/libxml2/0004-libxml2.la-is-in-top_builddir.patch +25 -0
  96. data/patches/libxml2/0005-Fix-infinite-loop-in-xmlStringLenDecodeEntities.patch +32 -0
  97. data/patches/libxml2/0006-htmlParseComment-treat-as-if-it-closed-the-comment.patch +73 -0
  98. data/patches/libxml2/0007-use-new-htmlParseLookupCommentEnd-to-find-comment-en.patch +103 -0
  99. data/patches/libxml2/0008-use-glibc-strlen.patch +53 -0
  100. data/patches/libxml2/0009-avoid-isnan-isinf.patch +81 -0
  101. data/ports/archives/libxml2-2.9.10.tar.gz +0 -0
  102. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
  103. metadata +106 -99
  104. data/ports/archives/libxml2-2.9.9.tar.gz +0 -0
  105. data/ports/archives/libxslt-1.1.33.tar.gz +0 -0
@@ -0,0 +1,44 @@
1
+ From ffc08467744bd2305d41ca882c37fa30adf3a067 Mon Sep 17 00:00:00 2001
2
+ From: Kevin Solorio <soloriok@gmail.com>
3
+ Date: Wed, 27 Feb 2019 14:34:17 -0800
4
+ Subject: [PATCH 2/2] update entities.c to remove handling of ssi
5
+
6
+ ---
7
+ entities.c | 21 ---------------------
8
+ 1 file changed, 21 deletions(-)
9
+
10
+ diff --git a/entities.c b/entities.c
11
+ index 43549bc5..5c4a2a60 100644
12
+ --- a/entities.c
13
+ +++ b/entities.c
14
+ @@ -592,27 +592,6 @@ xmlEncodeEntitiesInternal(xmlDocPtr doc, const xmlChar *input, int attr) {
15
+ * By default one have to encode at least '<', '>', '"' and '&' !
16
+ */
17
+ if (*cur == '<') {
18
+ - const xmlChar *end;
19
+ -
20
+ - /*
21
+ - * Special handling of server side include in HTML attributes
22
+ - */
23
+ - if (html && attr &&
24
+ - (cur[1] == '!') && (cur[2] == '-') && (cur[3] == '-') &&
25
+ - ((end = xmlStrstr(cur, BAD_CAST "-->")) != NULL)) {
26
+ - while (cur != end) {
27
+ - *out++ = *cur++;
28
+ - indx = out - buffer;
29
+ - if (indx + 100 > buffer_size) {
30
+ - growBufferReentrant();
31
+ - out = &buffer[indx];
32
+ - }
33
+ - }
34
+ - *out++ = *cur++;
35
+ - *out++ = *cur++;
36
+ - *out++ = *cur++;
37
+ - continue;
38
+ - }
39
+ *out++ = '&';
40
+ *out++ = 'l';
41
+ *out++ = 't';
42
+ --
43
+ 2.16.2
44
+
@@ -0,0 +1,25 @@
1
+ From 0b6ae484761fa01242fe8b67b54e3eb2d282d83d Mon Sep 17 00:00:00 2001
2
+ From: Mike Dalessio <mike.dalessio@gmail.com>
3
+ Date: Wed, 4 Dec 2019 08:43:51 -0500
4
+ Subject: [PATCH] fix libxml2.la's path
5
+
6
+ ---
7
+ Makefile.in | 2 +-
8
+ 1 file changed, 1 insertion(+), 1 deletion(-)
9
+
10
+ diff --git a/Makefile.in b/Makefile.in
11
+ index cf96d41..1372d8b 100644
12
+ --- a/Makefile.in
13
+ +++ b/Makefile.in
14
+ @@ -1057,7 +1057,7 @@ clean-noinstLTLIBRARIES:
15
+ rm -f $${locs}; \
16
+ }
17
+
18
+ -libxml2.la: $(libxml2_la_OBJECTS) $(libxml2_la_DEPENDENCIES) $(EXTRA_libxml2_la_DEPENDENCIES)
19
+ +$(top_builddir)/libxml2.la: $(libxml2_la_OBJECTS) $(libxml2_la_DEPENDENCIES) $(EXTRA_libxml2_la_DEPENDENCIES)
20
+ $(AM_V_CCLD)$(libxml2_la_LINK) -rpath $(libdir) $(libxml2_la_OBJECTS) $(libxml2_la_LIBADD) $(LIBS)
21
+
22
+ testdso.la: $(testdso_la_OBJECTS) $(testdso_la_DEPENDENCIES) $(EXTRA_testdso_la_DEPENDENCIES)
23
+ --
24
+ 2.17.1
25
+
@@ -0,0 +1,32 @@
1
+ From 0e1a49c8907645d2e155f0d89d4d9895ac5112b5 Mon Sep 17 00:00:00 2001
2
+ From: Zhipeng Xie <xiezhipeng1@huawei.com>
3
+ Date: Thu, 12 Dec 2019 17:30:55 +0800
4
+ Subject: [PATCH] Fix infinite loop in xmlStringLenDecodeEntities
5
+
6
+ When ctxt->instate == XML_PARSER_EOF,xmlParseStringEntityRef
7
+ return NULL which cause a infinite loop in xmlStringLenDecodeEntities
8
+
9
+ Found with libFuzzer.
10
+
11
+ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
12
+ ---
13
+ parser.c | 3 ++-
14
+ 1 file changed, 2 insertions(+), 1 deletion(-)
15
+
16
+ diff --git a/parser.c b/parser.c
17
+ index d1c3196..a34bb6c 100644
18
+ --- a/parser.c
19
+ +++ b/parser.c
20
+ @@ -2646,7 +2646,8 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
21
+ else
22
+ c = 0;
23
+ while ((c != 0) && (c != end) && /* non input consuming loop */
24
+ - (c != end2) && (c != end3)) {
25
+ + (c != end2) && (c != end3) &&
26
+ + (ctxt->instate != XML_PARSER_EOF)) {
27
+
28
+ if (c == 0) break;
29
+ if ((c == '&') && (str[1] == '#')) {
30
+ --
31
+ 2.17.1
32
+
@@ -0,0 +1,73 @@
1
+ From 4f51a6d2b1755ce5b36c524c215aad70d864ac1d Mon Sep 17 00:00:00 2001
2
+ From: Mike Dalessio <mike.dalessio@gmail.com>
3
+ Date: Mon, 3 Aug 2020 17:36:05 -0400
4
+ Subject: [PATCH 1/2] htmlParseComment: treat `--!>` as if it closed the
5
+ comment
6
+
7
+ See guidance provided on incorrectly-closed comments here:
8
+
9
+ https://html.spec.whatwg.org/multipage/parsing.html#parse-error-incorrectly-closed-comment
10
+ ---
11
+ HTMLparser.c | 28 ++++++++++++++++++++--------
12
+ 1 file changed, 20 insertions(+), 8 deletions(-)
13
+
14
+ diff --git a/HTMLparser.c b/HTMLparser.c
15
+ index 7b6d689..4d43479 100644
16
+ --- a/HTMLparser.c
17
+ +++ b/HTMLparser.c
18
+ @@ -3300,6 +3300,7 @@ htmlParseComment(htmlParserCtxtPtr ctxt) {
19
+ int q, ql;
20
+ int r, rl;
21
+ int cur, l;
22
+ + int next, nl;
23
+ xmlParserInputState state;
24
+
25
+ /*
26
+ @@ -3332,6 +3333,21 @@ htmlParseComment(htmlParserCtxtPtr ctxt) {
27
+ while (IS_CHAR(cur) &&
28
+ ((cur != '>') ||
29
+ (r != '-') || (q != '-'))) {
30
+ + NEXTL(l);
31
+ + next = CUR_CHAR(nl);
32
+ + if (next == 0) {
33
+ + SHRINK;
34
+ + GROW;
35
+ + next = CUR_CHAR(nl);
36
+ + }
37
+ +
38
+ + if ((q == '-') && (r == '-') && (cur == '!') && (next == '>')) {
39
+ + htmlParseErr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
40
+ + "Comment incorrectly closed by '--!>'", NULL, NULL);
41
+ + cur = '>';
42
+ + break;
43
+ + }
44
+ +
45
+ if (len + 5 >= size) {
46
+ xmlChar *tmp;
47
+
48
+ @@ -3345,18 +3361,14 @@ htmlParseComment(htmlParserCtxtPtr ctxt) {
49
+ }
50
+ buf = tmp;
51
+ }
52
+ - COPY_BUF(ql,buf,len,q);
53
+ + COPY_BUF(ql,buf,len,q);
54
+ +
55
+ q = r;
56
+ ql = rl;
57
+ r = cur;
58
+ rl = l;
59
+ - NEXTL(l);
60
+ - cur = CUR_CHAR(l);
61
+ - if (cur == 0) {
62
+ - SHRINK;
63
+ - GROW;
64
+ - cur = CUR_CHAR(l);
65
+ - }
66
+ + cur = next;
67
+ + l = nl;
68
+ }
69
+ buf[len] = 0;
70
+ if (IS_CHAR(cur)) {
71
+ --
72
+ 2.25.1
73
+
@@ -0,0 +1,103 @@
1
+ From b20d746fa7cbb74716171bc49d836af99927e41e Mon Sep 17 00:00:00 2001
2
+ From: Mike Dalessio <mike.dalessio@gmail.com>
3
+ Date: Sun, 11 Oct 2020 14:15:37 -0400
4
+ Subject: [PATCH 2/2] use new htmlParseLookupCommentEnd to find comment ends
5
+
6
+ Note that the caret in error messages generated during comment parsing
7
+ may have moved by one byte.
8
+
9
+ See guidance provided on incorrectly-closed comments here:
10
+
11
+ https://html.spec.whatwg.org/multipage/parsing.html#parse-error-incorrectly-closed-comment
12
+ ---
13
+ HTMLparser.c | 46 +++++++++++++++++++++++++++++++++++++---------
14
+ 1 file changed, 37 insertions(+), 9 deletions(-)
15
+
16
+ diff --git a/HTMLparser.c b/HTMLparser.c
17
+ index 4d43479..000dc3d 100644
18
+ --- a/HTMLparser.c
19
+ +++ b/HTMLparser.c
20
+ @@ -5331,6 +5331,39 @@ htmlParseLookupChars(htmlParserCtxtPtr ctxt, const xmlChar * stop,
21
+ return (-1);
22
+ }
23
+
24
+ +/**
25
+ + * htmlParseLookupCommentEnd:
26
+ + * @ctxt: an HTML parser context
27
+ + *
28
+ + * Try to find a comment end tag in the input stream
29
+ + * The search includes "-->" as well as WHATWG-recommended incorrectly-closed tags.
30
+ + * (See https://html.spec.whatwg.org/multipage/parsing.html#parse-error-incorrectly-closed-comment)
31
+ + * This function has a side effect of (possibly) incrementing ctxt->checkIndex
32
+ + * to avoid rescanning sequences of bytes, it DOES change the state of the
33
+ + * parser, do not use liberally.
34
+ + * This wraps to htmlParseLookupSequence()
35
+ + *
36
+ + * Returns the index to the current parsing point if the full sequence is available, -1 otherwise.
37
+ + */
38
+ +static int
39
+ +htmlParseLookupCommentEnd(htmlParserCtxtPtr ctxt)
40
+ +{
41
+ + int mark = 0;
42
+ + int cur = CUR_PTR - BASE_PTR;
43
+ +
44
+ + while (mark >= 0) {
45
+ + mark = htmlParseLookupSequence(ctxt, '-', '-', 0, 1, 1);
46
+ + if ((mark < 0) ||
47
+ + (NXT(mark+2) == '>') ||
48
+ + ((NXT(mark+2) == '!') && (NXT(mark+3) == '>'))) {
49
+ + return mark;
50
+ + }
51
+ + ctxt->checkIndex = cur + mark + 1;
52
+ + }
53
+ + return mark;
54
+ +}
55
+ +
56
+ +
57
+ /**
58
+ * htmlParseTryOrFinish:
59
+ * @ctxt: an HTML parser context
60
+ @@ -5507,8 +5540,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
61
+ cur = in->cur[0];
62
+ if ((cur == '<') && (next == '!') &&
63
+ (in->cur[2] == '-') && (in->cur[3] == '-')) {
64
+ - if ((!terminate) &&
65
+ - (htmlParseLookupSequence(ctxt, '-', '-', '>', 1, 1) < 0))
66
+ + if ((!terminate) && (htmlParseLookupCommentEnd(ctxt) < 0))
67
+ goto done;
68
+ #ifdef DEBUG_PUSH
69
+ xmlGenericError(xmlGenericErrorContext,
70
+ @@ -5567,8 +5599,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
71
+ next = in->cur[1];
72
+ if ((cur == '<') && (next == '!') &&
73
+ (in->cur[2] == '-') && (in->cur[3] == '-')) {
74
+ - if ((!terminate) &&
75
+ - (htmlParseLookupSequence(ctxt, '-', '-', '>', 1, 1) < 0))
76
+ + if ((!terminate) && (htmlParseLookupCommentEnd(ctxt) < 0))
77
+ goto done;
78
+ #ifdef DEBUG_PUSH
79
+ xmlGenericError(xmlGenericErrorContext,
80
+ @@ -5614,8 +5645,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
81
+ next = in->cur[1];
82
+ if ((cur == '<') && (next == '!') &&
83
+ (in->cur[2] == '-') && (in->cur[3] == '-')) {
84
+ - if ((!terminate) &&
85
+ - (htmlParseLookupSequence(ctxt, '-', '-', '>', 1, 1) < 0))
86
+ + if ((!terminate) && (htmlParseLookupCommentEnd(ctxt) < 0))
87
+ goto done;
88
+ #ifdef DEBUG_PUSH
89
+ xmlGenericError(xmlGenericErrorContext,
90
+ @@ -5871,9 +5901,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
91
+ htmlParseDocTypeDecl(ctxt);
92
+ } else if ((cur == '<') && (next == '!') &&
93
+ (in->cur[2] == '-') && (in->cur[3] == '-')) {
94
+ - if ((!terminate) &&
95
+ - (htmlParseLookupSequence(
96
+ - ctxt, '-', '-', '>', 1, 1) < 0))
97
+ + if ((!terminate) && (htmlParseLookupCommentEnd(ctxt) < 0))
98
+ goto done;
99
+ #ifdef DEBUG_PUSH
100
+ xmlGenericError(xmlGenericErrorContext,
101
+ --
102
+ 2.25.1
103
+
@@ -0,0 +1,53 @@
1
+ From c94172d2a4451368530db2186190d70be8a1d9e5 Mon Sep 17 00:00:00 2001
2
+ From: Ilya Zub <ilya@serpapi.com>
3
+ Date: Wed, 23 Dec 2020 12:45:29 +0200
4
+ Subject: Use glibc strlen to speed up xmlStrlen
5
+ MIME-Version: 1.0
6
+ Content-Type: text/plain; charset=UTF-8
7
+ Content-Transfer-Encoding: 8bit
8
+
9
+ xmlStrlen (entire HTML file): 926171.936981 μs
10
+ glibc_xmlStrlen (entire HTML file): 36905.903992 μs
11
+ delta (xmlStrlen ÷ glibc_xmlStrlen): 25.094584 times
12
+
13
+ xmlStrlen (average string): 57479.204010 μs
14
+ glibc_xmlStrlen (average string): 5802.069000 μs
15
+ delta (xmlStrlen ÷ glibc_xmlStrlen): 9.905937 times
16
+
17
+ xmlStrlen (bigger string): 388056.315979 μs
18
+ glibc_xmlStrlen (bigger string): 12797.856995 μs
19
+ delta (xmlStrlen ÷ glibc_xmlStrlen): 30.318382 times
20
+
21
+ xmlStrlen (smallest string): 15870.046021 μs
22
+ glibc_xmlStrlen (smallest string): 6282.208984 μs
23
+ delta (xmlStrlen ÷ glibc_xmlStrlen): 2.527903 times
24
+
25
+ See https://gitlab.gnome.org/GNOME/libxml2/-/issues/212 for reference.
26
+ ---
27
+ xmlstring.c | 9 ++-------
28
+ 1 file changed, 2 insertions(+), 7 deletions(-)
29
+
30
+ diff --git a/xmlstring.c b/xmlstring.c
31
+ index e8a1e45d..df247dff 100644
32
+ --- a/xmlstring.c
33
+ +++ b/xmlstring.c
34
+ @@ -423,14 +423,9 @@ xmlStrsub(const xmlChar *str, int start, int len) {
35
+
36
+ int
37
+ xmlStrlen(const xmlChar *str) {
38
+ - int len = 0;
39
+ -
40
+ if (str == NULL) return(0);
41
+ - while (*str != 0) { /* non input consuming */
42
+ - str++;
43
+ - len++;
44
+ - }
45
+ - return(len);
46
+ +
47
+ + return strlen((const char*)str);
48
+ }
49
+
50
+ /**
51
+ --
52
+ 2.29.2
53
+
@@ -0,0 +1,81 @@
1
+ This patch is a result of rake-compiler-dock using centos 7 (manylinux2014) to cross-compile.
2
+
3
+ Centos, for reasons I have not been able to discern, implements `isnan` and `isinf` as a function
4
+ and not as a macro. Debian knows how to resolve that function at dynamic-link time (despite using a
5
+ macro at compile time), but musl-based systems (like alpine) do not. Running `nm` on nokogiri.so
6
+ created on such a centos system shows:
7
+
8
+ ```
9
+ U __isinf@@GLIBC_2.2.5
10
+ U __isnan@@GLIBC_2.2.5
11
+ ```
12
+
13
+ (see https://github.com/sparklemotion/nokogiri/pull/2142 for more info)
14
+
15
+ This patch avoids using glibc's `isnan` and `isinf` calls, instead using libxml2's fallback
16
+ implementation. There's history here, see libxml2 commit 8813f39:
17
+
18
+ commit 8813f39
19
+ Author: Nick Wellnhofer <wellnhofer@aevum.de>
20
+ Date: 2017-09-21 00:11:26 +0200
21
+
22
+ Simplify XPath NaN, inf and -0 handling
23
+
24
+ Use C99 macros NAN, INFINITY, isnan, isinf. If they're not available:
25
+
26
+ - Assume that (0.0 / 0.0) generates a NaN and !(x == x) tests for NaN.
27
+ - Use C89's HUGE_VAL for INFINITY.
28
+
29
+ Remove manual handling of NaN, infinity and negative zero in functions
30
+ xmlXPathValueFlipSign and xmlXPathDivValues.
31
+
32
+ Remove xmlXPathGetSign. All the tests for negative zero can be replaced
33
+ with a test for negative or positive zero.
34
+
35
+ Simplify xmlXPathRoundFunction.
36
+
37
+ Remove Trio dependency.
38
+
39
+ This should work on IEEE 754 compliant implementations even if the C99
40
+ macros aren't available, but will likely break some ancient platforms.
41
+ If problems arise, my plan is to port the relevant trionan.c solution
42
+ to xpath.c. Note that non-compliant implementations are impossible
43
+ to fully support, anyway, since XPath requires IEEE 754.
44
+
45
+ This patch would be unnecessary if any of the following was true:
46
+
47
+ * centos implements these as macros, and doesn't generate an unresolved symbol for either in the shared library
48
+ * we had a way to ensure `__isinf` and `__isnan` resolve on musl (e.g., we implement them locally)
49
+
50
+ diff --git a/xpath.c b/xpath.c
51
+ index 9f64ab9..5b6d999 100644
52
+ --- a/xpath.c
53
+ +++ b/xpath.c
54
+ @@ -509,11 +509,7 @@ xmlXPathInit(void) {
55
+ */
56
+ int
57
+ xmlXPathIsNaN(double val) {
58
+ -#ifdef isnan
59
+ - return isnan(val);
60
+ -#else
61
+ return !(val == val);
62
+ -#endif
63
+ }
64
+
65
+ /**
66
+ @@ -524,15 +520,11 @@ xmlXPathIsNaN(double val) {
67
+ */
68
+ int
69
+ xmlXPathIsInf(double val) {
70
+ -#ifdef isinf
71
+ - return isinf(val) ? (val > 0 ? 1 : -1) : 0;
72
+ -#else
73
+ if (val >= INFINITY)
74
+ return 1;
75
+ if (val <= -INFINITY)
76
+ return -1;
77
+ return 0;
78
+ -#endif
79
+ }
80
+
81
+ #endif /* SCHEMAS or XPATH */
metadata CHANGED
@@ -1,161 +1,164 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nokogiri
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.11.1
5
5
  platform: ruby
6
6
  authors:
7
- - Aaron Patterson
8
7
  - Mike Dalessio
8
+ - Aaron Patterson
9
9
  - Yoko Harada
10
- - Tim Elliott
11
10
  - Akinori MUSHA
12
11
  - John Shahid
12
+ - Karol Bucek
13
13
  - Lars Kanis
14
+ - Sergio Arbeo
15
+ - Timothy Elliott
16
+ - Nobuyoshi Nakada
14
17
  autorequire:
15
18
  bindir: bin
16
19
  cert_chain: []
17
- date: 2019-01-04 00:00:00.000000000 Z
20
+ date: 2021-01-06 00:00:00.000000000 Z
18
21
  dependencies:
19
22
  - !ruby/object:Gem::Dependency
20
- name: mini_portile2
23
+ name: racc
21
24
  requirement: !ruby/object:Gem::Requirement
22
25
  requirements:
23
26
  - - "~>"
24
27
  - !ruby/object:Gem::Version
25
- version: 2.4.0
28
+ version: '1.4'
26
29
  type: :runtime
27
30
  prerelease: false
28
31
  version_requirements: !ruby/object:Gem::Requirement
29
32
  requirements:
30
33
  - - "~>"
31
34
  - !ruby/object:Gem::Version
32
- version: 2.4.0
35
+ version: '1.4'
33
36
  - !ruby/object:Gem::Dependency
34
- name: hoe-bundler
37
+ name: mini_portile2
35
38
  requirement: !ruby/object:Gem::Requirement
36
39
  requirements:
37
40
  - - "~>"
38
41
  - !ruby/object:Gem::Version
39
- version: '1.2'
40
- type: :development
42
+ version: 2.5.0
43
+ type: :runtime
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
47
  - - "~>"
45
48
  - !ruby/object:Gem::Version
46
- version: '1.2'
49
+ version: 2.5.0
47
50
  - !ruby/object:Gem::Dependency
48
- name: hoe-debugging
51
+ name: bundler
49
52
  requirement: !ruby/object:Gem::Requirement
50
53
  requirements:
51
54
  - - "~>"
52
55
  - !ruby/object:Gem::Version
53
- version: '2.0'
56
+ version: '2.2'
54
57
  type: :development
55
58
  prerelease: false
56
59
  version_requirements: !ruby/object:Gem::Requirement
57
60
  requirements:
58
61
  - - "~>"
59
62
  - !ruby/object:Gem::Version
60
- version: '2.0'
63
+ version: '2.2'
61
64
  - !ruby/object:Gem::Dependency
62
- name: hoe-gemspec
65
+ name: concourse
63
66
  requirement: !ruby/object:Gem::Requirement
64
67
  requirements:
65
68
  - - "~>"
66
69
  - !ruby/object:Gem::Version
67
- version: '1.0'
70
+ version: '0.41'
68
71
  type: :development
69
72
  prerelease: false
70
73
  version_requirements: !ruby/object:Gem::Requirement
71
74
  requirements:
72
75
  - - "~>"
73
76
  - !ruby/object:Gem::Version
74
- version: '1.0'
77
+ version: '0.41'
75
78
  - !ruby/object:Gem::Dependency
76
- name: hoe-git
79
+ name: hoe-markdown
77
80
  requirement: !ruby/object:Gem::Requirement
78
81
  requirements:
79
82
  - - "~>"
80
83
  - !ruby/object:Gem::Version
81
- version: '1.6'
84
+ version: '1.1'
82
85
  type: :development
83
86
  prerelease: false
84
87
  version_requirements: !ruby/object:Gem::Requirement
85
88
  requirements:
86
89
  - - "~>"
87
90
  - !ruby/object:Gem::Version
88
- version: '1.6'
91
+ version: '1.1'
89
92
  - !ruby/object:Gem::Dependency
90
93
  name: minitest
91
94
  requirement: !ruby/object:Gem::Requirement
92
95
  requirements:
93
96
  - - "~>"
94
97
  - !ruby/object:Gem::Version
95
- version: 5.8.4
98
+ version: '5.8'
96
99
  type: :development
97
100
  prerelease: false
98
101
  version_requirements: !ruby/object:Gem::Requirement
99
102
  requirements:
100
103
  - - "~>"
101
104
  - !ruby/object:Gem::Version
102
- version: 5.8.4
105
+ version: '5.8'
103
106
  - !ruby/object:Gem::Dependency
104
- name: rake
107
+ name: minitest-reporters
105
108
  requirement: !ruby/object:Gem::Requirement
106
109
  requirements:
107
110
  - - "~>"
108
111
  - !ruby/object:Gem::Version
109
- version: '12.0'
112
+ version: '1.4'
110
113
  type: :development
111
114
  prerelease: false
112
115
  version_requirements: !ruby/object:Gem::Requirement
113
116
  requirements:
114
117
  - - "~>"
115
118
  - !ruby/object:Gem::Version
116
- version: '12.0'
119
+ version: '1.4'
117
120
  - !ruby/object:Gem::Dependency
118
- name: rake-compiler
121
+ name: rake
119
122
  requirement: !ruby/object:Gem::Requirement
120
123
  requirements:
121
124
  - - "~>"
122
125
  - !ruby/object:Gem::Version
123
- version: 1.0.3
126
+ version: '13.0'
124
127
  type: :development
125
128
  prerelease: false
126
129
  version_requirements: !ruby/object:Gem::Requirement
127
130
  requirements:
128
131
  - - "~>"
129
132
  - !ruby/object:Gem::Version
130
- version: 1.0.3
133
+ version: '13.0'
131
134
  - !ruby/object:Gem::Dependency
132
- name: rake-compiler-dock
135
+ name: rake-compiler
133
136
  requirement: !ruby/object:Gem::Requirement
134
137
  requirements:
135
138
  - - "~>"
136
139
  - !ruby/object:Gem::Version
137
- version: 0.7.0
140
+ version: '1.1'
138
141
  type: :development
139
142
  prerelease: false
140
143
  version_requirements: !ruby/object:Gem::Requirement
141
144
  requirements:
142
145
  - - "~>"
143
146
  - !ruby/object:Gem::Version
144
- version: 0.7.0
147
+ version: '1.1'
145
148
  - !ruby/object:Gem::Dependency
146
- name: racc
149
+ name: rake-compiler-dock
147
150
  requirement: !ruby/object:Gem::Requirement
148
151
  requirements:
149
152
  - - "~>"
150
153
  - !ruby/object:Gem::Version
151
- version: 1.4.14
154
+ version: '1.1'
152
155
  type: :development
153
156
  prerelease: false
154
157
  version_requirements: !ruby/object:Gem::Requirement
155
158
  requirements:
156
159
  - - "~>"
157
160
  - !ruby/object:Gem::Version
158
- version: 1.4.14
161
+ version: '1.1'
159
162
  - !ruby/object:Gem::Dependency
160
163
  name: rexical
161
164
  requirement: !ruby/object:Gem::Requirement
@@ -171,108 +174,95 @@ dependencies:
171
174
  - !ruby/object:Gem::Version
172
175
  version: 1.0.5
173
176
  - !ruby/object:Gem::Dependency
174
- name: concourse
177
+ name: rubocop
175
178
  requirement: !ruby/object:Gem::Requirement
176
179
  requirements:
177
180
  - - "~>"
178
181
  - !ruby/object:Gem::Version
179
- version: '0.15'
182
+ version: '1.7'
180
183
  type: :development
181
184
  prerelease: false
182
185
  version_requirements: !ruby/object:Gem::Requirement
183
186
  requirements:
184
187
  - - "~>"
185
188
  - !ruby/object:Gem::Version
186
- version: '0.15'
189
+ version: '1.7'
187
190
  - !ruby/object:Gem::Dependency
188
- name: rdoc
191
+ name: simplecov
189
192
  requirement: !ruby/object:Gem::Requirement
190
193
  requirements:
191
- - - ">="
192
- - !ruby/object:Gem::Version
193
- version: '4.0'
194
- - - "<"
194
+ - - "~>"
195
195
  - !ruby/object:Gem::Version
196
- version: '7'
196
+ version: '0.20'
197
197
  type: :development
198
198
  prerelease: false
199
199
  version_requirements: !ruby/object:Gem::Requirement
200
200
  requirements:
201
- - - ">="
202
- - !ruby/object:Gem::Version
203
- version: '4.0'
204
- - - "<"
201
+ - - "~>"
205
202
  - !ruby/object:Gem::Version
206
- version: '7'
203
+ version: '0.20'
207
204
  - !ruby/object:Gem::Dependency
208
- name: hoe
205
+ name: yard
209
206
  requirement: !ruby/object:Gem::Requirement
210
207
  requirements:
211
208
  - - "~>"
212
209
  - !ruby/object:Gem::Version
213
- version: '3.17'
210
+ version: '0.9'
214
211
  type: :development
215
212
  prerelease: false
216
213
  version_requirements: !ruby/object:Gem::Requirement
217
214
  requirements:
218
215
  - - "~>"
219
216
  - !ruby/object:Gem::Version
220
- version: '3.17'
221
- description: |-
222
- Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser. Among
223
- Nokogiri's many features is the ability to search documents via XPath
224
- or CSS3 selectors.
225
- email:
226
- - aaronp@rubyforge.org
227
- - mike.dalessio@gmail.com
228
- - yokolet@gmail.com
229
- - tle@holymonkey.com
230
- - knu@idaemons.org
231
- - jvshahid@gmail.com
232
- - lars@greiz-reinsdorf.de
217
+ version: '0.9'
218
+ description: |
219
+ Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby. It provides a
220
+ sensible, easy-to-understand API for reading, writing, modifying, and querying documents. It is
221
+ fast and standards-compliant by relying on native parsers like libxml2 (C) and xerces (Java).
222
+ email: nokogiri-talk@googlegroups.com
233
223
  executables:
234
224
  - nokogiri
235
225
  extensions:
236
226
  - ext/nokogiri/extconf.rb
237
227
  extra_rdoc_files:
238
- - LICENSE-DEPENDENCIES.md
239
- - LICENSE.md
240
- - README.md
241
- - ext/nokogiri/html_document.c
242
- - ext/nokogiri/html_element_description.c
243
- - ext/nokogiri/html_entity_lookup.c
244
- - ext/nokogiri/html_sax_parser_context.c
245
- - ext/nokogiri/html_sax_push_parser.c
246
- - ext/nokogiri/nokogiri.c
228
+ - ext/nokogiri/xml_dtd.c
229
+ - ext/nokogiri/xml_xpath_context.c
247
230
  - ext/nokogiri/xml_attr.c
248
- - ext/nokogiri/xml_attribute_decl.c
249
- - ext/nokogiri/xml_cdata.c
250
231
  - ext/nokogiri/xml_comment.c
251
- - ext/nokogiri/xml_document.c
252
- - ext/nokogiri/xml_document_fragment.c
253
- - ext/nokogiri/xml_dtd.c
232
+ - ext/nokogiri/nokogiri.c
233
+ - ext/nokogiri/xml_sax_parser_context.c
234
+ - ext/nokogiri/xml_node_set.c
235
+ - ext/nokogiri/xml_reader.c
236
+ - ext/nokogiri/xml_libxml2_hacks.c
237
+ - ext/nokogiri/xml_cdata.c
254
238
  - ext/nokogiri/xml_element_content.c
239
+ - ext/nokogiri/html_entity_lookup.c
240
+ - ext/nokogiri/xml_namespace.c
241
+ - ext/nokogiri/xml_io.c
242
+ - ext/nokogiri/xml_document.c
255
243
  - ext/nokogiri/xml_element_decl.c
244
+ - ext/nokogiri/xml_schema.c
245
+ - ext/nokogiri/html_document.c
246
+ - ext/nokogiri/xml_processing_instruction.c
247
+ - ext/nokogiri/xml_text.c
248
+ - ext/nokogiri/xml_syntax_error.c
249
+ - ext/nokogiri/xml_document_fragment.c
250
+ - ext/nokogiri/xml_sax_push_parser.c
256
251
  - ext/nokogiri/xml_encoding_handler.c
252
+ - ext/nokogiri/html_sax_push_parser.c
253
+ - ext/nokogiri/xml_relax_ng.c
257
254
  - ext/nokogiri/xml_entity_decl.c
258
- - ext/nokogiri/xml_entity_reference.c
259
- - ext/nokogiri/xml_io.c
260
- - ext/nokogiri/xml_libxml2_hacks.c
261
- - ext/nokogiri/xml_namespace.c
255
+ - ext/nokogiri/test_global_handlers.c
262
256
  - ext/nokogiri/xml_node.c
263
- - ext/nokogiri/xml_node_set.c
264
- - ext/nokogiri/xml_processing_instruction.c
265
- - ext/nokogiri/xml_reader.c
266
- - ext/nokogiri/xml_relax_ng.c
267
- - ext/nokogiri/xml_sax_parser.c
268
- - ext/nokogiri/xml_sax_parser_context.c
269
- - ext/nokogiri/xml_sax_push_parser.c
270
- - ext/nokogiri/xml_schema.c
271
- - ext/nokogiri/xml_syntax_error.c
272
- - ext/nokogiri/xml_text.c
273
- - ext/nokogiri/xml_xpath_context.c
257
+ - ext/nokogiri/xml_entity_reference.c
274
258
  - ext/nokogiri/xslt_stylesheet.c
259
+ - ext/nokogiri/html_sax_parser_context.c
260
+ - ext/nokogiri/xml_sax_parser.c
261
+ - ext/nokogiri/xml_attribute_decl.c
262
+ - ext/nokogiri/html_element_description.c
263
+ - README.md
275
264
  files:
265
+ - Gemfile
276
266
  - LICENSE-DEPENDENCIES.md
277
267
  - LICENSE.md
278
268
  - README.md
@@ -292,6 +282,7 @@ files:
292
282
  - ext/nokogiri/html_sax_push_parser.h
293
283
  - ext/nokogiri/nokogiri.c
294
284
  - ext/nokogiri/nokogiri.h
285
+ - ext/nokogiri/test_global_handlers.c
295
286
  - ext/nokogiri/xml_attr.c
296
287
  - ext/nokogiri/xml_attr.h
297
288
  - ext/nokogiri/xml_attribute_decl.c
@@ -369,8 +360,11 @@ files:
369
360
  - lib/nokogiri/html/sax/parser.rb
370
361
  - lib/nokogiri/html/sax/parser_context.rb
371
362
  - lib/nokogiri/html/sax/push_parser.rb
363
+ - lib/nokogiri/jruby/dependencies.rb
372
364
  - lib/nokogiri/syntax_error.rb
373
365
  - lib/nokogiri/version.rb
366
+ - lib/nokogiri/version/constant.rb
367
+ - lib/nokogiri/version/info.rb
374
368
  - lib/nokogiri/xml.rb
375
369
  - lib/nokogiri/xml/attr.rb
376
370
  - lib/nokogiri/xml/attribute_decl.rb
@@ -412,12 +406,25 @@ files:
412
406
  - lib/nokogiri/xslt/stylesheet.rb
413
407
  - lib/xsd/xmlparser/nokogiri.rb
414
408
  - patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch
415
- - ports/archives/libxml2-2.9.9.tar.gz
416
- - ports/archives/libxslt-1.1.33.tar.gz
417
- homepage:
409
+ - patches/libxml2/0002-Remove-script-macro-support.patch
410
+ - patches/libxml2/0003-Update-entities-to-remove-handling-of-ssi.patch
411
+ - patches/libxml2/0004-libxml2.la-is-in-top_builddir.patch
412
+ - patches/libxml2/0005-Fix-infinite-loop-in-xmlStringLenDecodeEntities.patch
413
+ - patches/libxml2/0006-htmlParseComment-treat-as-if-it-closed-the-comment.patch
414
+ - patches/libxml2/0007-use-new-htmlParseLookupCommentEnd-to-find-comment-en.patch
415
+ - patches/libxml2/0008-use-glibc-strlen.patch
416
+ - patches/libxml2/0009-avoid-isnan-isinf.patch
417
+ - ports/archives/libxml2-2.9.10.tar.gz
418
+ - ports/archives/libxslt-1.1.34.tar.gz
419
+ homepage: https://nokogiri.org
418
420
  licenses:
419
421
  - MIT
420
- metadata: {}
422
+ metadata:
423
+ homepage_uri: https://nokogiri.org
424
+ bug_tracker_uri: https://github.com/sparklemotion/nokogiri/issues
425
+ documentation_uri: https://nokogiri.org/rdoc/index.html
426
+ changelog_uri: https://nokogiri.org/CHANGELOG.html
427
+ source_code_uri: https://github.com/sparklemotion/nokogiri
421
428
  post_install_message:
422
429
  rdoc_options:
423
430
  - "--main"
@@ -428,15 +435,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
428
435
  requirements:
429
436
  - - ">="
430
437
  - !ruby/object:Gem::Version
431
- version: 2.3.0
438
+ version: 2.5.0
432
439
  required_rubygems_version: !ruby/object:Gem::Requirement
433
440
  requirements:
434
441
  - - ">="
435
442
  - !ruby/object:Gem::Version
436
443
  version: '0'
437
444
  requirements: []
438
- rubygems_version: 3.0.1
445
+ rubygems_version: 3.1.4
439
446
  signing_key:
440
447
  specification_version: 4
441
- summary: Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser
448
+ summary: Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby.
442
449
  test_files: []