nokogiri 1.15.7-arm64-darwin → 1.16.0-arm64-darwin
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 +4 -4
- data/Gemfile +11 -14
- data/README.md +4 -1
- data/dependencies.yml +6 -5
- data/ext/nokogiri/extconf.rb +3 -4
- data/ext/nokogiri/html4_sax_push_parser.c +1 -1
- data/ext/nokogiri/include/libxml2/libxml/HTMLparser.h +23 -0
- data/ext/nokogiri/include/libxml2/libxml/SAX.h +0 -2
- data/ext/nokogiri/include/libxml2/libxml/SAX2.h +0 -2
- data/ext/nokogiri/include/libxml2/libxml/c14n.h +0 -2
- data/ext/nokogiri/include/libxml2/libxml/dict.h +1 -0
- data/ext/nokogiri/include/libxml2/libxml/encoding.h +16 -14
- data/ext/nokogiri/include/libxml2/libxml/entities.h +4 -0
- data/ext/nokogiri/include/libxml2/libxml/globals.h +15 -503
- data/ext/nokogiri/include/libxml2/libxml/hash.h +57 -61
- data/ext/nokogiri/include/libxml2/libxml/nanoftp.h +2 -2
- data/ext/nokogiri/include/libxml2/libxml/parser.h +128 -18
- data/ext/nokogiri/include/libxml2/libxml/parserInternals.h +1 -0
- data/ext/nokogiri/include/libxml2/libxml/relaxng.h +2 -1
- data/ext/nokogiri/include/libxml2/libxml/schemasInternals.h +1 -0
- data/ext/nokogiri/include/libxml2/libxml/schematron.h +1 -0
- data/ext/nokogiri/include/libxml2/libxml/threads.h +4 -11
- data/ext/nokogiri/include/libxml2/libxml/tree.h +68 -20
- data/ext/nokogiri/include/libxml2/libxml/uri.h +2 -1
- data/ext/nokogiri/include/libxml2/libxml/valid.h +2 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +65 -12
- data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +37 -8
- data/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +37 -40
- data/ext/nokogiri/include/libxml2/libxml/xmlreader.h +6 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlregexp.h +2 -9
- data/ext/nokogiri/include/libxml2/libxml/xmlsave.h +9 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlschemas.h +3 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +28 -43
- data/ext/nokogiri/include/libxml2/libxml/xpath.h +1 -1
- data/ext/nokogiri/include/libxml2/libxml/xpathInternals.h +2 -1
- data/ext/nokogiri/include/libxml2/libxml/xpointer.h +5 -4
- data/ext/nokogiri/nokogiri.h +10 -3
- data/ext/nokogiri/test_global_handlers.c +1 -1
- data/ext/nokogiri/xml_cdata.c +1 -2
- data/ext/nokogiri/xml_document.c +3 -3
- data/ext/nokogiri/xml_namespace.c +0 -4
- data/ext/nokogiri/xml_node.c +6 -15
- data/ext/nokogiri/xml_reader.c +1 -44
- data/ext/nokogiri/xml_relax_ng.c +1 -1
- data/ext/nokogiri/xml_sax_parser_context.c +4 -0
- data/ext/nokogiri/xml_sax_push_parser.c +1 -1
- data/ext/nokogiri/xml_schema.c +2 -3
- data/ext/nokogiri/xml_syntax_error.c +3 -3
- data/ext/nokogiri/xml_text.c +1 -2
- data/ext/nokogiri/xml_xpath_context.c +2 -5
- data/gumbo-parser/Makefile +15 -0
- data/lib/nokogiri/3.0/nokogiri.bundle +0 -0
- data/lib/nokogiri/3.1/nokogiri.bundle +0 -0
- data/lib/nokogiri/3.2/nokogiri.bundle +0 -0
- data/lib/nokogiri/{2.7 → 3.3}/nokogiri.bundle +0 -0
- data/lib/nokogiri/css/parser_extras.rb +1 -1
- data/lib/nokogiri/css/xpath_visitor.rb +1 -21
- data/lib/nokogiri/html4/document.rb +1 -1
- data/lib/nokogiri/html4/encoding_reader.rb +1 -1
- data/lib/nokogiri/html5.rb +0 -66
- data/lib/nokogiri/version/constant.rb +1 -1
- data/lib/nokogiri/version/info.rb +6 -5
- data/lib/nokogiri/xml/attr.rb +2 -2
- data/lib/nokogiri/xml/document.rb +3 -3
- data/lib/nokogiri/xml/document_fragment.rb +2 -2
- data/lib/nokogiri/xml/namespace.rb +1 -2
- data/lib/nokogiri/xml/node.rb +31 -24
- data/lib/nokogiri/xml/node_set.rb +3 -3
- data/lib/nokogiri/xml/searchable.rb +3 -3
- data/lib/nokogiri/xml/syntax_error.rb +1 -1
- data/lib/nokogiri/xml.rb +1 -1
- data/lib/nokogiri/xslt.rb +1 -1
- data/lib/nokogiri.rb +1 -1
- metadata +6 -5
@@ -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.
|
32
|
+
#define LIBXML_DOTTED_VERSION "2.12.3"
|
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
|
39
|
+
#define LIBXML_VERSION 21203
|
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 "
|
46
|
+
#define LIBXML_VERSION_STRING "21203"
|
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(
|
61
|
+
#define LIBXML_TEST_VERSION xmlCheckVersion(21203);
|
62
62
|
|
63
63
|
#ifndef VMS
|
64
64
|
#if 0
|
@@ -449,43 +449,27 @@ XMLPUBFUN void xmlCheckVersion(int version);
|
|
449
449
|
#endif
|
450
450
|
|
451
451
|
#if defined(__clang__) || (__GNUC__ * 100 + __GNUC_MINOR__ >= 406)
|
452
|
-
#
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
452
|
+
#if defined(__clang__) || (__GNUC__ * 100 + __GNUC_MINOR__ >= 800)
|
453
|
+
#define XML_IGNORE_FPTR_CAST_WARNINGS \
|
454
|
+
_Pragma("GCC diagnostic push") \
|
455
|
+
_Pragma("GCC diagnostic ignored \"-Wpedantic\"") \
|
456
|
+
_Pragma("GCC diagnostic ignored \"-Wcast-function-type\"")
|
457
|
+
#else
|
458
|
+
#define XML_IGNORE_FPTR_CAST_WARNINGS \
|
459
|
+
_Pragma("GCC diagnostic push") \
|
460
|
+
_Pragma("GCC diagnostic ignored \"-Wpedantic\"")
|
461
|
+
#endif
|
462
|
+
#define XML_POP_WARNINGS \
|
457
463
|
_Pragma("GCC diagnostic pop")
|
458
464
|
#else
|
459
|
-
#define XML_IGNORE_FPTR_CAST_WARNINGS
|
460
|
-
#define XML_POP_WARNINGS
|
465
|
+
#define XML_IGNORE_FPTR_CAST_WARNINGS
|
466
|
+
#define XML_POP_WARNINGS
|
461
467
|
#endif
|
462
468
|
|
463
|
-
/** DOC_ENABLE */
|
464
469
|
#else /* ! __GNUC__ */
|
465
|
-
/**
|
466
|
-
* ATTRIBUTE_UNUSED:
|
467
|
-
*
|
468
|
-
* Macro used to signal to GCC unused function parameters
|
469
|
-
*/
|
470
470
|
#define ATTRIBUTE_UNUSED
|
471
|
-
/**
|
472
|
-
* LIBXML_ATTR_ALLOC_SIZE:
|
473
|
-
*
|
474
|
-
* Macro used to indicate to GCC this is an allocator function
|
475
|
-
*/
|
476
471
|
#define LIBXML_ATTR_ALLOC_SIZE(x)
|
477
|
-
/**
|
478
|
-
* LIBXML_ATTR_FORMAT:
|
479
|
-
*
|
480
|
-
* Macro used to indicate to GCC the parameter are printf like
|
481
|
-
*/
|
482
472
|
#define LIBXML_ATTR_FORMAT(fmt,args)
|
483
|
-
/**
|
484
|
-
* XML_DEPRECATED:
|
485
|
-
*
|
486
|
-
* Macro used to indicate that a function, variable, type or struct member
|
487
|
-
* is deprecated.
|
488
|
-
*/
|
489
473
|
#ifndef XML_DEPRECATED
|
490
474
|
# if defined (IN_LIBXML) || !defined (_MSC_VER)
|
491
475
|
# define XML_DEPRECATED
|
@@ -494,21 +478,11 @@ XMLPUBFUN void xmlCheckVersion(int version);
|
|
494
478
|
# define XML_DEPRECATED __declspec(deprecated)
|
495
479
|
# endif
|
496
480
|
#endif
|
497
|
-
/**
|
498
|
-
* LIBXML_IGNORE_FPTR_CAST_WARNINGS:
|
499
|
-
*
|
500
|
-
* Macro used to ignore pointer cast warnings that can't be worked around.
|
501
|
-
*/
|
502
481
|
#if defined (_MSC_VER) && (_MSC_VER >= 1400)
|
503
482
|
# define XML_IGNORE_FPTR_CAST_WARNINGS __pragma(warning(push))
|
504
483
|
#else
|
505
484
|
# define XML_IGNORE_FPTR_CAST_WARNINGS
|
506
485
|
#endif
|
507
|
-
/**
|
508
|
-
* XML_POP_WARNINGS:
|
509
|
-
*
|
510
|
-
* Macro used to restore warnings state.
|
511
|
-
*/
|
512
486
|
#ifndef XML_POP_WARNINGS
|
513
487
|
# if defined (_MSC_VER) && (_MSC_VER >= 1400)
|
514
488
|
# define XML_POP_WARNINGS __pragma(warning(pop))
|
@@ -518,6 +492,17 @@ XMLPUBFUN void xmlCheckVersion(int version);
|
|
518
492
|
#endif
|
519
493
|
#endif /* __GNUC__ */
|
520
494
|
|
495
|
+
#define XML_NO_ATTR
|
496
|
+
|
497
|
+
#ifdef LIBXML_THREAD_ENABLED
|
498
|
+
#define XML_DECLARE_GLOBAL(name, type, attrs) \
|
499
|
+
attrs XMLPUBFUN type *__##name(void);
|
500
|
+
#define XML_GLOBAL_MACRO(name) (*__##name())
|
501
|
+
#else
|
502
|
+
#define XML_DECLARE_GLOBAL(name, type, attrs) \
|
503
|
+
attrs XMLPUBVAR type name;
|
504
|
+
#endif
|
505
|
+
|
521
506
|
#ifdef __cplusplus
|
522
507
|
}
|
523
508
|
#endif /* __cplusplus */
|
@@ -400,7 +400,7 @@ struct _xmlXPathParserContext {
|
|
400
400
|
int xptr; /* it this an XPointer expression */
|
401
401
|
xmlNodePtr ancestor; /* used for walking preceding axis */
|
402
402
|
|
403
|
-
int valueFrame; /*
|
403
|
+
int valueFrame; /* always zero for compatibility */
|
404
404
|
};
|
405
405
|
|
406
406
|
/************************************************************************
|
@@ -12,6 +12,7 @@
|
|
12
12
|
#ifndef __XML_XPATH_INTERNALS_H__
|
13
13
|
#define __XML_XPATH_INTERNALS_H__
|
14
14
|
|
15
|
+
#include <stdio.h>
|
15
16
|
#include <libxml/xmlversion.h>
|
16
17
|
#include <libxml/xpath.h>
|
17
18
|
|
@@ -297,7 +298,7 @@ XMLPUBFUN void *
|
|
297
298
|
if (ctxt == NULL) return; \
|
298
299
|
if (nargs != (x)) \
|
299
300
|
XP_ERROR(XPATH_INVALID_ARITY); \
|
300
|
-
if (ctxt->valueNr <
|
301
|
+
if (ctxt->valueNr < (x)) \
|
301
302
|
XP_ERROR(XPATH_STACK_ERROR);
|
302
303
|
|
303
304
|
/**
|
@@ -28,7 +28,7 @@
|
|
28
28
|
extern "C" {
|
29
29
|
#endif
|
30
30
|
|
31
|
-
#
|
31
|
+
#if defined(LIBXML_XPTR_LOCS_ENABLED)
|
32
32
|
/*
|
33
33
|
* A Location Set
|
34
34
|
*/
|
@@ -105,7 +105,7 @@ XML_DEPRECATED
|
|
105
105
|
XMLPUBFUN void
|
106
106
|
xmlXPtrLocationSetRemove (xmlLocationSetPtr cur,
|
107
107
|
int val);
|
108
|
-
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
108
|
+
#endif /* defined(LIBXML_XPTR_LOCS_ENABLED) */
|
109
109
|
|
110
110
|
/*
|
111
111
|
* Functions.
|
@@ -117,7 +117,8 @@ XMLPUBFUN xmlXPathContextPtr
|
|
117
117
|
XMLPUBFUN xmlXPathObjectPtr
|
118
118
|
xmlXPtrEval (const xmlChar *str,
|
119
119
|
xmlXPathContextPtr ctx);
|
120
|
-
|
120
|
+
|
121
|
+
#if defined(LIBXML_XPTR_LOCS_ENABLED)
|
121
122
|
XML_DEPRECATED
|
122
123
|
XMLPUBFUN void
|
123
124
|
xmlXPtrRangeToFunction (xmlXPathParserContextPtr ctxt,
|
@@ -128,7 +129,7 @@ XMLPUBFUN xmlNodePtr
|
|
128
129
|
XML_DEPRECATED
|
129
130
|
XMLPUBFUN void
|
130
131
|
xmlXPtrEvalRangePredicate (xmlXPathParserContextPtr ctxt);
|
131
|
-
#endif /* LIBXML_XPTR_LOCS_ENABLED */
|
132
|
+
#endif /* defined(LIBXML_XPTR_LOCS_ENABLED) */
|
132
133
|
#ifdef __cplusplus
|
133
134
|
}
|
134
135
|
#endif
|
data/ext/nokogiri/nokogiri.h
CHANGED
@@ -66,6 +66,13 @@ xmlNodePtr xmlLastElementChild(xmlNodePtr parent);
|
|
66
66
|
#define XMLNS_PREFIX "xmlns"
|
67
67
|
#define XMLNS_PREFIX_LEN 6 /* including either colon or \0 */
|
68
68
|
|
69
|
+
#ifndef xmlErrorConstPtr
|
70
|
+
# if LIBXML_VERSION >= 21200
|
71
|
+
# define xmlErrorConstPtr const xmlError *
|
72
|
+
# else
|
73
|
+
# define xmlErrorConstPtr xmlError *
|
74
|
+
# endif
|
75
|
+
#endif
|
69
76
|
|
70
77
|
#include <ruby.h>
|
71
78
|
#include <ruby/st.h>
|
@@ -227,9 +234,9 @@ void Nokogiri_structured_error_func_save(libxmlStructuredErrorHandlerState *hand
|
|
227
234
|
void Nokogiri_structured_error_func_save_and_set(libxmlStructuredErrorHandlerState *handler_state, void *user_data,
|
228
235
|
xmlStructuredErrorFunc handler);
|
229
236
|
void Nokogiri_structured_error_func_restore(libxmlStructuredErrorHandlerState *handler_state);
|
230
|
-
VALUE Nokogiri_wrap_xml_syntax_error(
|
231
|
-
void Nokogiri_error_array_pusher(void *ctx,
|
232
|
-
NORETURN_DECL void Nokogiri_error_raise(void *ctx,
|
237
|
+
VALUE Nokogiri_wrap_xml_syntax_error(xmlErrorConstPtr error);
|
238
|
+
void Nokogiri_error_array_pusher(void *ctx, xmlErrorConstPtr error);
|
239
|
+
NORETURN_DECL void Nokogiri_error_raise(void *ctx, xmlErrorConstPtr error);
|
233
240
|
void Nokogiri_marshal_xpath_funcall_and_return_values(xmlXPathParserContextPtr ctx, int nargs, VALUE handler,
|
234
241
|
const char *function_name) ;
|
235
242
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
static VALUE foreign_error_handler_block = Qnil;
|
4
4
|
|
5
5
|
static void
|
6
|
-
foreign_error_handler(void *user_data,
|
6
|
+
foreign_error_handler(void *user_data, xmlErrorConstPtr c_error)
|
7
7
|
{
|
8
8
|
rb_funcall(foreign_error_handler_block, rb_intern("call"), 0);
|
9
9
|
}
|
data/ext/nokogiri/xml_cdata.c
CHANGED
@@ -33,8 +33,7 @@ rb_xml_cdata_s_new(int argc, VALUE *argv, VALUE klass)
|
|
33
33
|
|
34
34
|
if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlDocument)) {
|
35
35
|
xmlNodePtr deprecated_node_type_arg;
|
36
|
-
// TODO:
|
37
|
-
NOKO_WARN_DEPRECATION("Passing a Node as the first parameter to CDATA.new is deprecated. Please pass a Document instead. This will become an error in a future release of Nokogiri.");
|
36
|
+
NOKO_WARN_DEPRECATION("Passing a Node as the first parameter to CDATA.new is deprecated. Please pass a Document instead. This will become an error in Nokogiri v1.17.0."); // TODO: deprecated in v1.15.3, remove in v1.17.0
|
38
37
|
Noko_Node_Get_Struct(rb_document, xmlNode, deprecated_node_type_arg);
|
39
38
|
c_document = deprecated_node_type_arg->doc;
|
40
39
|
} else {
|
data/ext/nokogiri/xml_document.c
CHANGED
@@ -337,7 +337,7 @@ read_io(VALUE klass,
|
|
337
337
|
xmlSetStructuredErrorFunc(NULL, NULL);
|
338
338
|
|
339
339
|
if (doc == NULL) {
|
340
|
-
|
340
|
+
xmlErrorConstPtr error;
|
341
341
|
|
342
342
|
xmlFreeDoc(doc);
|
343
343
|
|
@@ -383,7 +383,7 @@ read_memory(VALUE klass,
|
|
383
383
|
xmlSetStructuredErrorFunc(NULL, NULL);
|
384
384
|
|
385
385
|
if (doc == NULL) {
|
386
|
-
|
386
|
+
xmlErrorConstPtr error;
|
387
387
|
|
388
388
|
xmlFreeDoc(doc);
|
389
389
|
|
@@ -537,7 +537,7 @@ create_entity(int argc, VALUE *argv, VALUE self)
|
|
537
537
|
);
|
538
538
|
|
539
539
|
if (NULL == ptr) {
|
540
|
-
|
540
|
+
xmlErrorConstPtr error = xmlGetLastError();
|
541
541
|
if (error) {
|
542
542
|
rb_exc_raise(Nokogiri_wrap_xml_syntax_error(error));
|
543
543
|
} else {
|
@@ -42,7 +42,6 @@ _xml_namespace_dealloc(void *ptr)
|
|
42
42
|
xmlFree(ns);
|
43
43
|
}
|
44
44
|
|
45
|
-
#ifdef HAVE_RB_GC_LOCATION
|
46
45
|
static void
|
47
46
|
_xml_namespace_update_references(void *ptr)
|
48
47
|
{
|
@@ -51,9 +50,6 @@ _xml_namespace_update_references(void *ptr)
|
|
51
50
|
ns->_private = (void *)rb_gc_location((VALUE)ns->_private);
|
52
51
|
}
|
53
52
|
}
|
54
|
-
#else
|
55
|
-
# define _xml_namespace_update_references 0
|
56
|
-
#endif
|
57
53
|
|
58
54
|
static const rb_data_type_t nokogiri_xml_namespace_type_with_dealloc = {
|
59
55
|
.wrap_struct_name = "Nokogiri::XML::Namespace#with_dealloc",
|
data/ext/nokogiri/xml_node.c
CHANGED
@@ -28,7 +28,6 @@ _xml_node_mark(void *ptr)
|
|
28
28
|
}
|
29
29
|
}
|
30
30
|
|
31
|
-
#ifdef HAVE_RB_GC_LOCATION
|
32
31
|
static void
|
33
32
|
_xml_node_update_references(void *ptr)
|
34
33
|
{
|
@@ -38,9 +37,6 @@ _xml_node_update_references(void *ptr)
|
|
38
37
|
node->_private = (void *)rb_gc_location((VALUE)node->_private);
|
39
38
|
}
|
40
39
|
}
|
41
|
-
#else
|
42
|
-
# define _xml_node_update_references 0
|
43
|
-
#endif
|
44
40
|
|
45
41
|
static const rb_data_type_t nokogiri_node_type = {
|
46
42
|
.wrap_struct_name = "Nokogiri::XML::Node",
|
@@ -961,7 +957,7 @@ internal_subset(VALUE self)
|
|
961
957
|
* - +new_parent_doc+
|
962
958
|
* The new node's parent Document. Defaults to the this node's document.
|
963
959
|
*
|
964
|
-
* [Returns] The new
|
960
|
+
* [Returns] The new Nokogiri::XML::Node
|
965
961
|
*/
|
966
962
|
static VALUE
|
967
963
|
duplicate_node(int argc, VALUE *argv, VALUE self)
|
@@ -1853,19 +1849,13 @@ is_one_of(xmlNodePtr node, char const *const *tagnames, size_t num_tagnames)
|
|
1853
1849
|
if (name == NULL) { // fragments don't have a name
|
1854
1850
|
return false;
|
1855
1851
|
}
|
1856
|
-
|
1857
|
-
if (node->ns != NULL) {
|
1858
|
-
// if the node has a namespace, it's in a foreign context and is not one of the HTML tags we're
|
1859
|
-
// matching against.
|
1860
|
-
return false;
|
1861
|
-
}
|
1862
|
-
|
1863
1852
|
for (size_t idx = 0; idx < num_tagnames; ++idx) {
|
1864
1853
|
if (!strcmp(name, tagnames[idx])) {
|
1865
1854
|
return true;
|
1866
1855
|
}
|
1867
1856
|
}
|
1868
1857
|
return false;
|
1858
|
+
|
1869
1859
|
}
|
1870
1860
|
|
1871
1861
|
static void
|
@@ -2064,8 +2054,7 @@ rb_xml_node_new(int argc, VALUE *argv, VALUE klass)
|
|
2064
2054
|
rb_raise(rb_eArgError, "document must be a Nokogiri::XML::Node");
|
2065
2055
|
}
|
2066
2056
|
if (!rb_obj_is_kind_of(rb_document_node, cNokogiriXmlDocument)) {
|
2067
|
-
// TODO:
|
2068
|
-
NOKO_WARN_DEPRECATION("Passing a Node as the second parameter to Node.new is deprecated. Please pass a Document instead, or prefer an alternative constructor like Node#add_child. This will become an error in a future release of Nokogiri.");
|
2057
|
+
NOKO_WARN_DEPRECATION("Passing a Node as the second parameter to Node.new is deprecated. Please pass a Document instead, or prefer an alternative constructor like Node#add_child. This will become an error in Nokogiri v1.17.0."); // TODO: deprecated in v1.13.0, remove in v1.17.0
|
2069
2058
|
}
|
2070
2059
|
Noko_Node_Get_Struct(rb_document_node, xmlNode, c_document_node);
|
2071
2060
|
|
@@ -2144,7 +2133,7 @@ process_xincludes(VALUE self, VALUE options)
|
|
2144
2133
|
xmlSetStructuredErrorFunc(NULL, NULL);
|
2145
2134
|
|
2146
2135
|
if (rcode < 0) {
|
2147
|
-
|
2136
|
+
xmlErrorConstPtr error;
|
2148
2137
|
|
2149
2138
|
error = xmlGetLastError();
|
2150
2139
|
if (error) {
|
@@ -2180,6 +2169,8 @@ in_context(VALUE self, VALUE _str, VALUE _options)
|
|
2180
2169
|
|
2181
2170
|
/* Twiddle global variable because of a bug in libxml2.
|
2182
2171
|
* http://git.gnome.org/browse/libxml2/commit/?id=e20fb5a72c83cbfc8e4a8aa3943c6be8febadab7
|
2172
|
+
*
|
2173
|
+
* TODO: this is fixed, and HTML_PARSE_NOIMPLIED is defined, in libxml2 2.7.7
|
2183
2174
|
*/
|
2184
2175
|
#ifndef HTML_PARSE_NOIMPLIED
|
2185
2176
|
htmlHandleOmittedElem(0);
|
data/ext/nokogiri/xml_reader.c
CHANGED
@@ -166,48 +166,6 @@ rb_xml_reader_namespaces(VALUE rb_reader)
|
|
166
166
|
return rb_namespaces ;
|
167
167
|
}
|
168
168
|
|
169
|
-
/*
|
170
|
-
:call-seq: attribute_nodes() → Array<Nokogiri::XML::Attr>
|
171
|
-
|
172
|
-
Get the attributes of the current node as an Array of XML:Attr
|
173
|
-
|
174
|
-
⚠ This method is deprecated and unsafe to use. It will be removed in a future version of Nokogiri.
|
175
|
-
|
176
|
-
See related: #attribute_hash, #attributes
|
177
|
-
*/
|
178
|
-
static VALUE
|
179
|
-
rb_xml_reader_attribute_nodes(VALUE rb_reader)
|
180
|
-
{
|
181
|
-
xmlTextReaderPtr c_reader;
|
182
|
-
xmlNodePtr c_node;
|
183
|
-
VALUE attr_nodes;
|
184
|
-
int j;
|
185
|
-
|
186
|
-
// TODO: deprecated, remove in Nokogiri v1.15, see https://github.com/sparklemotion/nokogiri/issues/2598
|
187
|
-
// After removal, we can also remove all the "node_has_a_document" special handling from xml_node.c
|
188
|
-
NOKO_WARN_DEPRECATION("Reader#attribute_nodes is deprecated and will be removed in a future version of Nokogiri. Please use Reader#attribute_hash instead.");
|
189
|
-
|
190
|
-
TypedData_Get_Struct(rb_reader, xmlTextReader, &xml_reader_type, c_reader);
|
191
|
-
|
192
|
-
if (! has_attributes(c_reader)) {
|
193
|
-
return rb_ary_new() ;
|
194
|
-
}
|
195
|
-
|
196
|
-
c_node = xmlTextReaderExpand(c_reader);
|
197
|
-
if (c_node == NULL) {
|
198
|
-
return Qnil;
|
199
|
-
}
|
200
|
-
|
201
|
-
attr_nodes = noko_xml_node_attrs(c_node);
|
202
|
-
|
203
|
-
/* ensure that the Reader won't be GCed as long as a node is referenced */
|
204
|
-
for (j = 0 ; j < RARRAY_LEN(attr_nodes) ; j++) {
|
205
|
-
rb_iv_set(rb_ary_entry(attr_nodes, j), "@reader", rb_reader);
|
206
|
-
}
|
207
|
-
|
208
|
-
return attr_nodes;
|
209
|
-
}
|
210
|
-
|
211
169
|
/*
|
212
170
|
:call-seq: attribute_hash() → Hash<String ⇒ String>
|
213
171
|
|
@@ -554,7 +512,7 @@ static VALUE
|
|
554
512
|
read_more(VALUE self)
|
555
513
|
{
|
556
514
|
xmlTextReaderPtr reader;
|
557
|
-
|
515
|
+
xmlErrorConstPtr error;
|
558
516
|
VALUE error_list;
|
559
517
|
int ret;
|
560
518
|
|
@@ -778,7 +736,6 @@ noko_init_xml_reader(void)
|
|
778
736
|
rb_define_method(cNokogiriXmlReader, "attribute", reader_attribute, 1);
|
779
737
|
rb_define_method(cNokogiriXmlReader, "attribute_at", attribute_at, 1);
|
780
738
|
rb_define_method(cNokogiriXmlReader, "attribute_count", attribute_count, 0);
|
781
|
-
rb_define_method(cNokogiriXmlReader, "attribute_nodes", rb_xml_reader_attribute_nodes, 0);
|
782
739
|
rb_define_method(cNokogiriXmlReader, "attribute_hash", rb_xml_reader_attribute_hash, 0);
|
783
740
|
rb_define_method(cNokogiriXmlReader, "attributes?", attributes_eh, 0);
|
784
741
|
rb_define_method(cNokogiriXmlReader, "base_uri", rb_xml_reader_base_uri, 0);
|
data/ext/nokogiri/xml_relax_ng.c
CHANGED
@@ -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;
|
@@ -59,7 +59,7 @@ native_write(VALUE self, VALUE _chunk, VALUE _last_chunk)
|
|
59
59
|
|
60
60
|
if (xmlParseChunk(ctx, chunk, size, Qtrue == _last_chunk ? 1 : 0)) {
|
61
61
|
if (!(ctx->options & XML_PARSE_RECOVER)) {
|
62
|
-
|
62
|
+
xmlErrorConstPtr e = xmlCtxtGetLastError(ctx);
|
63
63
|
Nokogiri_error_raise(NULL, e);
|
64
64
|
}
|
65
65
|
}
|
data/ext/nokogiri/xml_schema.c
CHANGED
@@ -146,7 +146,7 @@ xml_schema_parse_schema(
|
|
146
146
|
xmlSchemaFreeParserCtxt(c_parser_context);
|
147
147
|
|
148
148
|
if (NULL == c_schema) {
|
149
|
-
|
149
|
+
xmlErrorConstPtr error = xmlGetLastError();
|
150
150
|
if (error) {
|
151
151
|
Nokogiri_error_raise(NULL, error);
|
152
152
|
} else {
|
@@ -222,8 +222,7 @@ rb_xml_schema_s_from_document(int argc, VALUE *argv, VALUE klass)
|
|
222
222
|
|
223
223
|
if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlDocument)) {
|
224
224
|
xmlNodePtr deprecated_node_type_arg;
|
225
|
-
// TODO:
|
226
|
-
NOKO_WARN_DEPRECATION("Passing a Node as the first parameter to Schema.from_document is deprecated. Please pass a Document instead. This will become an error in a future release of Nokogiri.");
|
225
|
+
NOKO_WARN_DEPRECATION("Passing a Node as the first parameter to Schema.from_document is deprecated. Please pass a Document instead. This will become an error in Nokogiri v1.17.0."); // TODO: deprecated in v1.15.3, remove in v1.17.0
|
227
226
|
Noko_Node_Get_Struct(rb_document, xmlNode, deprecated_node_type_arg);
|
228
227
|
c_document = deprecated_node_type_arg->doc;
|
229
228
|
} else {
|
@@ -26,7 +26,7 @@ Nokogiri_structured_error_func_restore(libxmlStructuredErrorHandlerState *handle
|
|
26
26
|
}
|
27
27
|
|
28
28
|
void
|
29
|
-
Nokogiri_error_array_pusher(void *ctx,
|
29
|
+
Nokogiri_error_array_pusher(void *ctx, xmlErrorConstPtr error)
|
30
30
|
{
|
31
31
|
VALUE list = (VALUE)ctx;
|
32
32
|
Check_Type(list, T_ARRAY);
|
@@ -34,13 +34,13 @@ Nokogiri_error_array_pusher(void *ctx, xmlErrorPtr error)
|
|
34
34
|
}
|
35
35
|
|
36
36
|
void
|
37
|
-
Nokogiri_error_raise(void *ctx,
|
37
|
+
Nokogiri_error_raise(void *ctx, xmlErrorConstPtr error)
|
38
38
|
{
|
39
39
|
rb_exc_raise(Nokogiri_wrap_xml_syntax_error(error));
|
40
40
|
}
|
41
41
|
|
42
42
|
VALUE
|
43
|
-
Nokogiri_wrap_xml_syntax_error(
|
43
|
+
Nokogiri_wrap_xml_syntax_error(xmlErrorConstPtr error)
|
44
44
|
{
|
45
45
|
VALUE msg, e, klass;
|
46
46
|
|
data/ext/nokogiri/xml_text.c
CHANGED
@@ -28,8 +28,7 @@ rb_xml_text_s_new(int argc, VALUE *argv, VALUE klass)
|
|
28
28
|
|
29
29
|
if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlDocument)) {
|
30
30
|
xmlNodePtr deprecated_node_type_arg;
|
31
|
-
// TODO:
|
32
|
-
NOKO_WARN_DEPRECATION("Passing a Node as the second parameter to Text.new is deprecated. Please pass a Document instead. This will become an error in a future release of Nokogiri.");
|
31
|
+
NOKO_WARN_DEPRECATION("Passing a Node as the second parameter to Text.new is deprecated. Please pass a Document instead. This will become an error in Nokogiri v1.17.0."); // TODO: deprecated in v1.15.3, remove in v1.17.0
|
33
32
|
Noko_Node_Get_Struct(rb_document, xmlNode, deprecated_node_type_arg);
|
34
33
|
c_document = deprecated_node_type_arg->doc;
|
35
34
|
} else {
|
@@ -321,11 +321,8 @@ handler_lookup(void *data, const xmlChar *c_name, const xmlChar *c_ns_uri)
|
|
321
321
|
VALUE rb_handler = (VALUE)data;
|
322
322
|
if (rb_respond_to(rb_handler, rb_intern((const char *)c_name))) {
|
323
323
|
if (c_ns_uri == NULL) {
|
324
|
-
NOKO_WARN_DEPRECATION(
|
325
|
-
|
326
|
-
" Please update your query to reference this function as 'nokogiri:%s'."
|
327
|
-
" Invoking custom handler functions without a namespace is deprecated and support will be removed in a future release of Nokogiri.",
|
328
|
-
c_name, c_name);
|
324
|
+
NOKO_WARN_DEPRECATION("A custom XPath or CSS handler function named '%s' is being invoked without a namespace. Please update your query to reference this function as 'nokogiri:%s'. Invoking custom handler functions without a namespace is deprecated and will become an error in Nokogiri v1.17.0.",
|
325
|
+
c_name, c_name); // deprecated in v1.15.0, remove in v1.17.0
|
329
326
|
}
|
330
327
|
return method_caller;
|
331
328
|
}
|
data/gumbo-parser/Makefile
CHANGED
@@ -13,6 +13,20 @@ LDFLAGS := -pthread
|
|
13
13
|
|
14
14
|
all: check
|
15
15
|
|
16
|
+
fuzzers: fuzzer-normal fuzzer-asan fuzzer-ubsan fuzzer-msan
|
17
|
+
|
18
|
+
fuzzer-normal:
|
19
|
+
./fuzzer/build.sh
|
20
|
+
|
21
|
+
fuzzer-asan:
|
22
|
+
SANITIZER=asan ./fuzzer/build.sh
|
23
|
+
|
24
|
+
fuzzer-ubsan:
|
25
|
+
SANITIZER=ubsan ./fuzzer/build.sh
|
26
|
+
|
27
|
+
fuzzer-msan:
|
28
|
+
SANITIZER=msan ./fuzzer/build.sh
|
29
|
+
|
16
30
|
# don't try to regenerate ragel or gperf files in CI, that should be a development-only action and
|
17
31
|
# the generated files should be committed to SCM
|
18
32
|
ifneq ($(CI),true)
|
@@ -81,6 +95,7 @@ coverage:
|
|
81
95
|
|
82
96
|
clean:
|
83
97
|
$(RM) -r build
|
98
|
+
$(RM) -r fuzzer/build fuzzer/src-* fuzzer/gumbo_corpus
|
84
99
|
|
85
100
|
build/src/flags: | build/src
|
86
101
|
@echo 'old_CC := $(CC)' > $@
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -302,7 +302,7 @@ module Nokogiri
|
|
302
302
|
end
|
303
303
|
|
304
304
|
def read_a_and_positive_b(values)
|
305
|
-
op = values[2]
|
305
|
+
op = values[2].strip
|
306
306
|
if op == "+"
|
307
307
|
a = values[0].to_i
|
308
308
|
b = values[3].to_i
|
@@ -335,25 +335,5 @@ module Nokogiri
|
|
335
335
|
end
|
336
336
|
end
|
337
337
|
end
|
338
|
-
|
339
|
-
module XPathVisitorAlwaysUseBuiltins # :nodoc:
|
340
|
-
def self.new
|
341
|
-
warn(
|
342
|
-
"Nokogiri::CSS::XPathVisitorAlwaysUseBuiltins is deprecated and will be removed in a future version of Nokogiri",
|
343
|
-
{ uplevel: 1 },
|
344
|
-
)
|
345
|
-
XPathVisitor.new(builtins: :always)
|
346
|
-
end
|
347
|
-
end
|
348
|
-
|
349
|
-
module XPathVisitorOptimallyUseBuiltins # :nodoc:
|
350
|
-
def self.new
|
351
|
-
warn(
|
352
|
-
"Nokogiri::CSS::XPathVisitorOptimallyUseBuiltins is deprecated and will be removed in a future version of Nokogiri",
|
353
|
-
{ uplevel: 1 },
|
354
|
-
)
|
355
|
-
XPathVisitor.new(builtins: :optimal)
|
356
|
-
end
|
357
|
-
end
|
358
338
|
end
|
359
339
|
end
|
@@ -92,7 +92,7 @@ module Nokogiri
|
|
92
92
|
title = XML::Node.new("title", self) << tnode
|
93
93
|
if (head = at_xpath("//head"))
|
94
94
|
head << title
|
95
|
-
elsif (meta =
|
95
|
+
elsif (meta = at_xpath("//meta[@charset]") || meta_content_type)
|
96
96
|
# better put after charset declaration
|
97
97
|
meta.add_next_sibling(title)
|
98
98
|
else
|
@@ -94,7 +94,7 @@ module Nokogiri
|
|
94
94
|
# no support for a call without len
|
95
95
|
|
96
96
|
unless @firstchunk
|
97
|
-
(@firstchunk = @io.read(len)) ||
|
97
|
+
(@firstchunk = @io.read(len)) || return
|
98
98
|
|
99
99
|
# This implementation expects that the first call from
|
100
100
|
# htmlReadIO() is made with a length long enough (~1KB) to
|