nokogiri-maglev- 1.5.3 → 1.5.4.20120815005250
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.ja.rdoc +27 -1
- data/CHANGELOG.rdoc +27 -1
- data/C_CODING_STYLE.rdoc +9 -3
- data/Rakefile +3 -1
- data/bin/nokogiri +3 -1
- data/ext/nokogiri/extconf.rb +14 -4
- data/ext/nokogiri/nokogiri.c +20 -0
- data/ext/nokogiri/nokogiri.h +2 -5
- data/ext/nokogiri/xml_attr.c +1 -1
- data/ext/nokogiri/xml_cdata.c +1 -1
- data/ext/nokogiri/xml_comment.c +1 -1
- data/ext/nokogiri/xml_document.c +2 -2
- data/ext/nokogiri/xml_document_fragment.c +1 -1
- data/ext/nokogiri/xml_entity_reference.c +1 -1
- data/ext/nokogiri/xml_node.c +15 -12
- data/ext/nokogiri/xml_processing_instruction.c +1 -1
- data/ext/nokogiri/xml_text.c +1 -1
- data/ext/nokogiri/xml_xpath_context.c +1 -1
- data/lib/nokogiri/version.rb +1 -1
- data/lib/nokogiri/xml/document.rb +26 -8
- data/lib/nokogiri/xml/node.rb +1 -1
- data/lib/nokogiri/xml/node_set.rb +1 -1
- data/lib/nokogiri/xml/parse_options.rb +7 -2
- data/test/xml/test_document_fragment.rb +5 -0
- data/test/xml/test_node.rb +10 -0
- data/test/xml/test_node_set.rb +5 -0
- data/test/xml/test_parse_options.rb +12 -0
- metadata +51 -38
data/CHANGELOG.ja.rdoc
CHANGED
@@ -1,4 +1,30 @@
|
|
1
|
-
== 1.5.
|
1
|
+
== 1.5.4 / unreleased
|
2
|
+
|
3
|
+
* Features
|
4
|
+
|
5
|
+
* The "nokogiri" script now has more verbose output when passed the `--rng` option. #675 (Thanks, Dan Radez!)
|
6
|
+
* Build support on hardened Debian systems that use `-Werror=format-security`. #680.
|
7
|
+
* Better build support for systems with pkg-config. #584
|
8
|
+
* Better build support for systems with multiple iconv installations.
|
9
|
+
|
10
|
+
* Bugfixes
|
11
|
+
|
12
|
+
* Segmentation fault when creating a comment node for a DocumentFragment. #677, #678.
|
13
|
+
* Treat '.' as xpath in at() and search(). #690
|
14
|
+
|
15
|
+
* [MRI, Security] Default parse options for XML documents were
|
16
|
+
changed to not make network connections during document parsing,
|
17
|
+
to avoid XXE vulnerability. #693
|
18
|
+
|
19
|
+
To re-enable this behavior, the configuration method `nononet` may
|
20
|
+
be called, like this:
|
21
|
+
|
22
|
+
Nokogiri::XML::Document.parse(xml) { |config| config.nononet }
|
23
|
+
|
24
|
+
Insert your own joke about double-negatives here.
|
25
|
+
|
26
|
+
|
27
|
+
== 1.5.3 / 2012-06-01
|
2
28
|
|
3
29
|
* Features
|
4
30
|
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,4 +1,30 @@
|
|
1
|
-
== 1.5.
|
1
|
+
== 1.5.4 / unreleased
|
2
|
+
|
3
|
+
* Features
|
4
|
+
|
5
|
+
* The "nokogiri" script now has more verbose output when passed the `--rng` option. #675 (Thanks, Dan Radez!)
|
6
|
+
* Build support on hardened Debian systems that use `-Werror=format-security`. #680.
|
7
|
+
* Better build support for systems with pkg-config. #584
|
8
|
+
* Better build support for systems with multiple iconv installations.
|
9
|
+
|
10
|
+
* Bugfixes
|
11
|
+
|
12
|
+
* Segmentation fault when creating a comment node for a DocumentFragment. #677, #678.
|
13
|
+
* Treat '.' as xpath in at() and search(). #690
|
14
|
+
|
15
|
+
* [MRI, Security] Default parse options for XML documents were
|
16
|
+
changed to not make network connections during document parsing,
|
17
|
+
to avoid XXE vulnerability. #693
|
18
|
+
|
19
|
+
To re-enable this behavior, the configuration method `nononet` may
|
20
|
+
be called, like this:
|
21
|
+
|
22
|
+
Nokogiri::XML::Document.parse(xml) { |config| config.nononet }
|
23
|
+
|
24
|
+
Insert your own joke about double-negatives here.
|
25
|
+
|
26
|
+
|
27
|
+
== 1.5.3 / 2012-06-01
|
2
28
|
|
3
29
|
* Features
|
4
30
|
|
data/C_CODING_STYLE.rdoc
CHANGED
@@ -4,11 +4,17 @@ Please don't propose commits that only change whitespace. However, if your
|
|
4
4
|
commit touches a function or section that is not using MRI Ruby conventions,
|
5
5
|
feel free to update whitespace in the surrounding code.
|
6
6
|
|
7
|
+
|
7
8
|
= WHITESPACE:
|
8
9
|
|
9
|
-
indent level: 2
|
10
|
-
indent type: Always spaces
|
11
|
-
|
10
|
+
* indent level: 2
|
11
|
+
* indent type: Always spaces
|
12
|
+
* line Breaks: LF
|
13
|
+
|
14
|
+
This style can be automatically applied by running:
|
15
|
+
|
16
|
+
astyle --indent=spaces=2 --style=1tbs --keep-one-line-blocks $(ack -f --type=cpp --type=cc ext/nokogiri)
|
17
|
+
|
12
18
|
|
13
19
|
= FUNCTION DECLARATION:
|
14
20
|
|
data/Rakefile
CHANGED
@@ -23,10 +23,11 @@ end
|
|
23
23
|
|
24
24
|
require 'tasks/nokogiri.org'
|
25
25
|
|
26
|
-
HOE = Hoe.spec 'maglev-
|
26
|
+
HOE = Hoe.spec 'nokogiri-maglev-' do
|
27
27
|
developer 'Aaron Patterson', 'aaronp@rubyforge.org'
|
28
28
|
developer 'Mike Dalessio', 'mike.dalessio@gmail.com'
|
29
29
|
developer 'Yoko Harada', 'yokolet@gmail.com'
|
30
|
+
developer 'Tim Elliott', 'tle@holymonkey.com'
|
30
31
|
|
31
32
|
self.readme_file = ['README', ENV['HLANG'], 'rdoc'].compact.join('.')
|
32
33
|
self.history_file = ['CHANGELOG', ENV['HLANG'], 'rdoc'].compact.join('.')
|
@@ -49,6 +50,7 @@ HOE = Hoe.spec 'maglev-nokogiri' do
|
|
49
50
|
["mini_portile", ">= 0.2.2"],
|
50
51
|
["minitest", "~> 2.2.2"],
|
51
52
|
["racc", ">= 1.4.6"],
|
53
|
+
["rake", ">= 0.9"],
|
52
54
|
["rake-compiler", "= 0.8.0"],
|
53
55
|
["rexical", ">= 1.0.5"],
|
54
56
|
]
|
data/bin/nokogiri
CHANGED
data/ext/nokogiri/extconf.rb
CHANGED
@@ -7,8 +7,8 @@ require 'mkmf'
|
|
7
7
|
RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
|
8
8
|
|
9
9
|
ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
10
|
-
LIBDIR =
|
11
|
-
INCLUDEDIR =
|
10
|
+
LIBDIR = RbConfig::CONFIG['libdir']
|
11
|
+
INCLUDEDIR = RbConfig::CONFIG['includedir']
|
12
12
|
|
13
13
|
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'macruby'
|
14
14
|
$LIBRUBYARG_STATIC.gsub!(/-static/, '')
|
@@ -99,12 +99,22 @@ def asplode(lib)
|
|
99
99
|
abort "-----\n#{lib} is missing. please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.\n-----"
|
100
100
|
end
|
101
101
|
|
102
|
-
pkg_config('libxslt')
|
102
|
+
pkg_config('libxslt')
|
103
|
+
pkg_config('libxml-2.0')
|
104
|
+
pkg_config('libiconv')
|
105
|
+
|
106
|
+
def have_iconv?
|
107
|
+
%w{ iconv_open libiconv_open }.any? do |method|
|
108
|
+
have_func(method, 'iconv.h') or
|
109
|
+
have_library('iconv', method, 'iconv.h') or
|
110
|
+
find_library('iconv', method, 'iconv.h')
|
111
|
+
end
|
112
|
+
end
|
103
113
|
|
104
114
|
asplode "libxml2" unless find_header('libxml/parser.h')
|
105
115
|
asplode "libxslt" unless find_header('libxslt/xslt.h')
|
106
116
|
asplode "libexslt" unless find_header('libexslt/exslt.h')
|
107
|
-
# asplode "libiconv" unless
|
117
|
+
# asplode "libiconv" unless have_iconv?
|
108
118
|
asplode "libxml2" unless find_library("#{lib_prefix}xml2", 'xmlParseDoc')
|
109
119
|
asplode "libxslt" unless find_library("#{lib_prefix}xslt", 'xsltParseStylesheetDoc')
|
110
120
|
asplode "libexslt" unless find_library("#{lib_prefix}exslt", 'exsltFuncRegister')
|
data/ext/nokogiri/nokogiri.c
CHANGED
@@ -43,6 +43,26 @@ void vasprintf_free (void *p)
|
|
43
43
|
#endif
|
44
44
|
#endif
|
45
45
|
|
46
|
+
void nokogiri_root_node(xmlNodePtr node)
|
47
|
+
{
|
48
|
+
xmlDocPtr doc;
|
49
|
+
nokogiriTuplePtr tuple;
|
50
|
+
|
51
|
+
doc = node->doc;
|
52
|
+
if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
|
53
|
+
tuple = (nokogiriTuplePtr)doc->_private;
|
54
|
+
st_insert(tuple->unlinkedNodes, (st_data_t)node, (st_data_t)node);
|
55
|
+
}
|
56
|
+
|
57
|
+
void nokogiri_root_nsdef(xmlNsPtr ns, xmlDocPtr doc)
|
58
|
+
{
|
59
|
+
nokogiriTuplePtr tuple;
|
60
|
+
|
61
|
+
if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
|
62
|
+
tuple = (nokogiriTuplePtr)doc->_private;
|
63
|
+
st_insert(tuple->unlinkedNodes, (st_data_t)ns, (st_data_t)ns);
|
64
|
+
}
|
65
|
+
|
46
66
|
void Init_nokogiri()
|
47
67
|
{
|
48
68
|
#if !defined(__MACRUBY__) && !defined(MAGLEV)
|
data/ext/nokogiri/nokogiri.h
CHANGED
@@ -120,11 +120,8 @@ extern VALUE mNokogiriHtml ;
|
|
120
120
|
extern VALUE mNokogiriHtmlSax ;
|
121
121
|
extern VALUE mNokogiriXslt ;
|
122
122
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
#define NOKOGIRI_ROOT_NSDEF(_nsDef, _doc) \
|
127
|
-
st_insert(((nokogiriTuplePtr)(_doc)->_private)->unlinkedNodes, (st_data_t)(_nsDef), (st_data_t)(_nsDef))
|
123
|
+
void nokogiri_root_node(xmlNodePtr);
|
124
|
+
void nokogiri_root_nsdef(xmlNsPtr, xmlDocPtr);
|
128
125
|
|
129
126
|
#ifdef DEBUG
|
130
127
|
|
data/ext/nokogiri/xml_attr.c
CHANGED
data/ext/nokogiri/xml_cdata.c
CHANGED
@@ -25,7 +25,7 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
|
|
25
25
|
NIL_P(content) ? 0 : (int)RSTRING_LEN(content)
|
26
26
|
);
|
27
27
|
|
28
|
-
|
28
|
+
nokogiri_root_node(node);
|
29
29
|
|
30
30
|
rb_node = Nokogiri_wrap_xml_node(klass, node);
|
31
31
|
rb_obj_call_init(rb_node, argc, argv);
|
data/ext/nokogiri/xml_comment.c
CHANGED
data/ext/nokogiri/xml_document.c
CHANGED
@@ -102,7 +102,7 @@ static VALUE set_root(VALUE self, VALUE root)
|
|
102
102
|
|
103
103
|
if(old_root) {
|
104
104
|
xmlUnlinkNode(old_root);
|
105
|
-
|
105
|
+
nokogiri_root_node(old_root);
|
106
106
|
}
|
107
107
|
|
108
108
|
return root;
|
@@ -121,7 +121,7 @@ static VALUE set_root(VALUE self, VALUE root)
|
|
121
121
|
}
|
122
122
|
|
123
123
|
xmlDocSetRootElement(doc, new_root);
|
124
|
-
if(old_root)
|
124
|
+
if(old_root) nokogiri_root_node(old_root);
|
125
125
|
return root;
|
126
126
|
}
|
127
127
|
|
data/ext/nokogiri/xml_node.c
CHANGED
@@ -51,7 +51,7 @@ static void relink_namespace(xmlNodePtr reparented)
|
|
51
51
|
} else {
|
52
52
|
reparented->nsDef = curr->next;
|
53
53
|
}
|
54
|
-
|
54
|
+
nokogiri_root_nsdef(curr, reparented->doc);
|
55
55
|
} else {
|
56
56
|
prev = curr;
|
57
57
|
}
|
@@ -132,7 +132,7 @@ static VALUE reparent_node_with(VALUE pivot_obj, VALUE reparentee_obj, pivot_rep
|
|
132
132
|
* uninteresting libxml2 implementation detail). as a result, we cannot
|
133
133
|
* reparent the actual reparentee, so we reparent a duplicate.
|
134
134
|
*/
|
135
|
-
|
135
|
+
nokogiri_root_node(reparentee);
|
136
136
|
if (!(reparentee = xmlDocCopyNode(reparentee, pivot->doc, 1))) {
|
137
137
|
rb_raise(rb_eRuntimeError, "Could not reparent node (xmlDocCopyNode)");
|
138
138
|
}
|
@@ -162,7 +162,7 @@ static VALUE reparent_node_with(VALUE pivot_obj, VALUE reparentee_obj, pivot_rep
|
|
162
162
|
new_next_text = xmlDocCopyNode(next_text, pivot->doc, 1) ;
|
163
163
|
|
164
164
|
xmlUnlinkNode(next_text);
|
165
|
-
|
165
|
+
nokogiri_root_node(next_text);
|
166
166
|
|
167
167
|
xmlAddNextSibling(pivot, new_next_text);
|
168
168
|
}
|
@@ -375,7 +375,7 @@ static VALUE duplicate_node(int argc, VALUE *argv, VALUE self)
|
|
375
375
|
dup = xmlDocCopyNode(node, node->doc, (int)NUM2INT(level));
|
376
376
|
if(dup == NULL) return Qnil;
|
377
377
|
|
378
|
-
|
378
|
+
nokogiri_root_node(dup);
|
379
379
|
|
380
380
|
return Nokogiri_wrap_xml_node(rb_obj_class(self), dup);
|
381
381
|
}
|
@@ -391,7 +391,7 @@ static VALUE unlink_node(VALUE self)
|
|
391
391
|
xmlNodePtr node;
|
392
392
|
Data_Get_Struct(self, xmlNode, node);
|
393
393
|
xmlUnlinkNode(node);
|
394
|
-
|
394
|
+
nokogiri_root_node(node);
|
395
395
|
return self;
|
396
396
|
}
|
397
397
|
|
@@ -489,7 +489,7 @@ static VALUE replace(VALUE self, VALUE new_node)
|
|
489
489
|
|
490
490
|
xmlNodePtr pivot;
|
491
491
|
Data_Get_Struct(self, xmlNode, pivot);
|
492
|
-
|
492
|
+
nokogiri_root_node(pivot);
|
493
493
|
|
494
494
|
return reparent;
|
495
495
|
}
|
@@ -681,7 +681,7 @@ static VALUE set(VALUE self, VALUE property, VALUE value)
|
|
681
681
|
if (prop && prop->children) {
|
682
682
|
for (cur = prop->children; cur; cur = cur->next) {
|
683
683
|
if (cur->_private) {
|
684
|
-
|
684
|
+
nokogiri_root_node(cur);
|
685
685
|
xmlUnlinkNode(cur);
|
686
686
|
}
|
687
687
|
}
|
@@ -901,7 +901,7 @@ static VALUE set_content(VALUE self, VALUE content)
|
|
901
901
|
while (NULL != child) {
|
902
902
|
next = child->next ;
|
903
903
|
xmlUnlinkNode(child) ;
|
904
|
-
|
904
|
+
nokogiri_root_node(child);
|
905
905
|
child = next ;
|
906
906
|
}
|
907
907
|
|
@@ -1133,7 +1133,7 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
|
|
1133
1133
|
|
1134
1134
|
node = xmlNewNode(NULL, (xmlChar *)StringValuePtr(name));
|
1135
1135
|
node->doc = doc->doc;
|
1136
|
-
|
1136
|
+
nokogiri_root_node(node);
|
1137
1137
|
|
1138
1138
|
rb_node = Nokogiri_wrap_xml_node(
|
1139
1139
|
klass == cNokogiriXmlNode ? Qnil : klass,
|
@@ -1322,6 +1322,7 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node)
|
|
1322
1322
|
VALUE node_cache = Qnil ;
|
1323
1323
|
VALUE rb_node = Qnil ;
|
1324
1324
|
nokogiriTuplePtr node_has_a_document;
|
1325
|
+
xmlDocPtr doc;
|
1325
1326
|
void (*mark_method)(xmlNodePtr) = NULL ;
|
1326
1327
|
|
1327
1328
|
assert(node);
|
@@ -1332,7 +1333,9 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node)
|
|
1332
1333
|
/* It's OK if the node doesn't have a fully-realized document (as in XML::Reader). */
|
1333
1334
|
/* see https://github.com/tenderlove/nokogiri/issues/95 */
|
1334
1335
|
/* and https://github.com/tenderlove/nokogiri/issues/439 */
|
1335
|
-
|
1336
|
+
doc = node->doc;
|
1337
|
+
if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
|
1338
|
+
node_has_a_document = DOC_RUBY_OBJECT_TEST(doc);
|
1336
1339
|
|
1337
1340
|
if(node->_private && node_has_a_document)
|
1338
1341
|
return (VALUE)node->_private;
|
@@ -1397,8 +1400,8 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node)
|
|
1397
1400
|
node->_private = (void *)rb_node;
|
1398
1401
|
|
1399
1402
|
if (node_has_a_document) {
|
1400
|
-
document = DOC_RUBY_OBJECT(
|
1401
|
-
node_cache = DOC_NODE_CACHE(
|
1403
|
+
document = DOC_RUBY_OBJECT(doc);
|
1404
|
+
node_cache = DOC_NODE_CACHE(doc);
|
1402
1405
|
rb_ary_push(node_cache, rb_node);
|
1403
1406
|
rb_funcall(document, decorate, 1, rb_node);
|
1404
1407
|
}
|
data/ext/nokogiri/xml_text.c
CHANGED
@@ -22,7 +22,7 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
|
|
22
22
|
node = xmlNewText((xmlChar *)StringValuePtr(string));
|
23
23
|
node->doc = doc->doc;
|
24
24
|
|
25
|
-
|
25
|
+
nokogiri_root_node(node);
|
26
26
|
|
27
27
|
rb_node = Nokogiri_wrap_xml_node(klass, node) ;
|
28
28
|
rb_obj_call_init(rb_node, argc, argv);
|
data/lib/nokogiri/version.rb
CHANGED
@@ -3,10 +3,11 @@ module Nokogiri
|
|
3
3
|
##
|
4
4
|
# Nokogiri::XML::Document is the main entry point for dealing with
|
5
5
|
# XML documents. The Document is created by parsing an XML document.
|
6
|
-
# See Nokogiri.
|
6
|
+
# See Nokogiri::XML::Document.parse() for more information on parsing.
|
7
7
|
#
|
8
8
|
# For searching a Document, see Nokogiri::XML::Node#css and
|
9
9
|
# Nokogiri::XML::Node#xpath
|
10
|
+
#
|
10
11
|
class Document < Nokogiri::XML::Node
|
11
12
|
# I'm ignoring unicode characters here.
|
12
13
|
# See http://www.w3.org/TR/REC-xml-names/#ns-decl for more details.
|
@@ -15,13 +16,30 @@ module Nokogiri
|
|
15
16
|
NCNAME_RE = /^xmlns(:[#{NCNAME_START_CHAR}][#{NCNAME_CHAR}]*)?$/
|
16
17
|
|
17
18
|
##
|
18
|
-
# Parse an XML file.
|
19
|
-
#
|
20
|
-
# +
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
19
|
+
# Parse an XML file.
|
20
|
+
#
|
21
|
+
# +string_or_io+ may be a String, or any object that responds to
|
22
|
+
# _read_ and _close_ such as an IO, or StringIO.
|
23
|
+
#
|
24
|
+
# +url+ (optional) is the URI where this document is located.
|
25
|
+
#
|
26
|
+
# +encoding+ (optional) is the encoding that should be used when processing
|
27
|
+
# the document.
|
28
|
+
#
|
29
|
+
# +options+ (optional) is a configuration object that sets options during
|
30
|
+
# parsing, such as Nokogiri::XML::ParseOptions::RECOVER. See the
|
31
|
+
# Nokogiri::XML::ParseOptions for more information.
|
32
|
+
#
|
33
|
+
# +block+ (optional) is passed a configuration object on which
|
34
|
+
# parse options may be set.
|
35
|
+
#
|
36
|
+
# When parsing untrusted documents, it's recommended that the
|
37
|
+
# +nonet+ option be used, as shown in this example code:
|
38
|
+
#
|
39
|
+
# Nokogiri::XML::Document.parse(xml_string) { |config| config.nonet }
|
40
|
+
#
|
41
|
+
# Nokogiri.XML() is a convenience method which will call this method.
|
42
|
+
#
|
25
43
|
def self.parse string_or_io, url = nil, encoding = nil, options = ParseOptions::DEFAULT_XML, &block
|
26
44
|
options = Nokogiri::XML::ParseOptions.new(options) if Fixnum === options
|
27
45
|
# Give the options to the user
|
data/lib/nokogiri/xml/node.rb
CHANGED
@@ -27,7 +27,7 @@ module Nokogiri
|
|
27
27
|
SAX1 = 1 << 9
|
28
28
|
# Implement XInclude substitution
|
29
29
|
XINCLUDE = 1 << 10
|
30
|
-
# Forbid network access
|
30
|
+
# Forbid network access. Recommended for dealing with untrusted documents.
|
31
31
|
NONET = 1 << 11
|
32
32
|
# Do not reuse the context dictionary
|
33
33
|
NODICT = 1 << 12
|
@@ -47,7 +47,7 @@ module Nokogiri
|
|
47
47
|
HUGE = 1 << 19
|
48
48
|
|
49
49
|
# the default options used for parsing XML documents
|
50
|
-
DEFAULT_XML = RECOVER
|
50
|
+
DEFAULT_XML = RECOVER | NONET
|
51
51
|
# the default options used for parsing HTML documents
|
52
52
|
DEFAULT_HTML = RECOVER | NOERROR | NOWARNING | NONET
|
53
53
|
|
@@ -64,6 +64,11 @@ module Nokogiri
|
|
64
64
|
self
|
65
65
|
end
|
66
66
|
|
67
|
+
def no#{constant.downcase}
|
68
|
+
@options &= ~#{constant}
|
69
|
+
self
|
70
|
+
end
|
71
|
+
|
67
72
|
def #{constant.downcase}?
|
68
73
|
#{constant} & @options == #{constant}
|
69
74
|
end
|
@@ -176,6 +176,11 @@ module Nokogiri
|
|
176
176
|
assert fragment.children.respond_to?(:awesome!), fragment.children.class
|
177
177
|
end
|
178
178
|
|
179
|
+
def test_add_node_to_doc_fragment_segfault
|
180
|
+
frag = Nokogiri::XML::DocumentFragment.new(@xml, '<p>hello world</p>')
|
181
|
+
Nokogiri::XML::Comment.new(frag,'moo')
|
182
|
+
end
|
183
|
+
|
179
184
|
if Nokogiri.uses_libxml?
|
180
185
|
def test_for_libxml_in_context_fragment_parsing_bug_workaround
|
181
186
|
10.times do
|
data/test/xml/test_node.rb
CHANGED
@@ -454,6 +454,11 @@ module Nokogiri
|
|
454
454
|
assert_equal node, @xml.xpath('//address').first
|
455
455
|
end
|
456
456
|
|
457
|
+
def test_at_self
|
458
|
+
node = @xml.at('address')
|
459
|
+
assert_equal node, node.at('.')
|
460
|
+
end
|
461
|
+
|
457
462
|
def test_at_xpath
|
458
463
|
node = @xml.at_xpath('//address')
|
459
464
|
nodes = @xml.xpath('//address')
|
@@ -740,6 +745,11 @@ module Nokogiri
|
|
740
745
|
assert_equal node.parent, parent_node
|
741
746
|
end
|
742
747
|
|
748
|
+
def test_search_self
|
749
|
+
node = @xml.at('//employee')
|
750
|
+
assert_equal node.search('.').to_a, [node]
|
751
|
+
end
|
752
|
+
|
743
753
|
def test_search_by_symbol
|
744
754
|
assert set = @xml.search(:employee)
|
745
755
|
assert 5, set.length
|
data/test/xml/test_node_set.rb
CHANGED
@@ -146,6 +146,11 @@ module Nokogiri
|
|
146
146
|
assert_equal @xml.xpath('//employee'), custom_employees
|
147
147
|
end
|
148
148
|
|
149
|
+
def test_search_self
|
150
|
+
set = @xml.xpath('//staff')
|
151
|
+
assert_equal set.to_a, set.search('.').to_a
|
152
|
+
end
|
153
|
+
|
149
154
|
def test_search_with_custom_object
|
150
155
|
set = @xml.xpath('//staff')
|
151
156
|
custom_employees = set.search('//*[awesome(.)]', Class.new {
|
@@ -35,6 +35,18 @@ module Nokogiri
|
|
35
35
|
assert_equal 1 << 1, options.options
|
36
36
|
end
|
37
37
|
|
38
|
+
def test_unsetting
|
39
|
+
options = Nokogiri::XML::ParseOptions.new Nokogiri::XML::ParseOptions::DEFAULT_HTML
|
40
|
+
assert options.nonet?
|
41
|
+
assert options.recover?
|
42
|
+
options.nononet.norecover
|
43
|
+
assert ! options.nonet?
|
44
|
+
assert ! options.recover?
|
45
|
+
options.nonet.recover
|
46
|
+
assert options.nonet?
|
47
|
+
assert options.recover?
|
48
|
+
end
|
49
|
+
|
38
50
|
def test_chaining
|
39
51
|
options = Nokogiri::XML::ParseOptions.new.recover.noent
|
40
52
|
assert options.recover?
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nokogiri-maglev-
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.4.20120815005250
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Aaron Patterson
|
9
9
|
- Mike Dalessio
|
10
10
|
- Yoko Harada
|
11
|
+
- Tim Elliott
|
11
12
|
autorequire:
|
12
13
|
bindir: bin
|
13
14
|
cert_chain: []
|
@@ -15,7 +16,7 @@ date: 2012-08-14 00:00:00.000000000 Z
|
|
15
16
|
dependencies:
|
16
17
|
- !ruby/object:Gem::Dependency
|
17
18
|
name: hoe-bundler
|
18
|
-
requirement: &
|
19
|
+
requirement: &70249603047560 !ruby/object:Gem::Requirement
|
19
20
|
none: false
|
20
21
|
requirements:
|
21
22
|
- - ! '>='
|
@@ -23,10 +24,10 @@ dependencies:
|
|
23
24
|
version: '1.1'
|
24
25
|
type: :development
|
25
26
|
prerelease: false
|
26
|
-
version_requirements: *
|
27
|
+
version_requirements: *70249603047560
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: hoe-debugging
|
29
|
-
requirement: &
|
30
|
+
requirement: &70249603045740 !ruby/object:Gem::Requirement
|
30
31
|
none: false
|
31
32
|
requirements:
|
32
33
|
- - ! '>='
|
@@ -34,10 +35,10 @@ dependencies:
|
|
34
35
|
version: 1.0.3
|
35
36
|
type: :development
|
36
37
|
prerelease: false
|
37
|
-
version_requirements: *
|
38
|
+
version_requirements: *70249603045740
|
38
39
|
- !ruby/object:Gem::Dependency
|
39
40
|
name: hoe-gemspec
|
40
|
-
requirement: &
|
41
|
+
requirement: &70249603044800 !ruby/object:Gem::Requirement
|
41
42
|
none: false
|
42
43
|
requirements:
|
43
44
|
- - ! '>='
|
@@ -45,10 +46,10 @@ dependencies:
|
|
45
46
|
version: '1.0'
|
46
47
|
type: :development
|
47
48
|
prerelease: false
|
48
|
-
version_requirements: *
|
49
|
+
version_requirements: *70249603044800
|
49
50
|
- !ruby/object:Gem::Dependency
|
50
51
|
name: hoe-git
|
51
|
-
requirement: &
|
52
|
+
requirement: &70249603043820 !ruby/object:Gem::Requirement
|
52
53
|
none: false
|
53
54
|
requirements:
|
54
55
|
- - ! '>='
|
@@ -56,10 +57,10 @@ dependencies:
|
|
56
57
|
version: '1.4'
|
57
58
|
type: :development
|
58
59
|
prerelease: false
|
59
|
-
version_requirements: *
|
60
|
+
version_requirements: *70249603043820
|
60
61
|
- !ruby/object:Gem::Dependency
|
61
62
|
name: mini_portile
|
62
|
-
requirement: &
|
63
|
+
requirement: &70249603042500 !ruby/object:Gem::Requirement
|
63
64
|
none: false
|
64
65
|
requirements:
|
65
66
|
- - ! '>='
|
@@ -67,10 +68,10 @@ dependencies:
|
|
67
68
|
version: 0.2.2
|
68
69
|
type: :development
|
69
70
|
prerelease: false
|
70
|
-
version_requirements: *
|
71
|
+
version_requirements: *70249603042500
|
71
72
|
- !ruby/object:Gem::Dependency
|
72
73
|
name: minitest
|
73
|
-
requirement: &
|
74
|
+
requirement: &70249603041740 !ruby/object:Gem::Requirement
|
74
75
|
none: false
|
75
76
|
requirements:
|
76
77
|
- - ~>
|
@@ -78,10 +79,10 @@ dependencies:
|
|
78
79
|
version: 2.2.2
|
79
80
|
type: :development
|
80
81
|
prerelease: false
|
81
|
-
version_requirements: *
|
82
|
+
version_requirements: *70249603041740
|
82
83
|
- !ruby/object:Gem::Dependency
|
83
84
|
name: racc
|
84
|
-
requirement: &
|
85
|
+
requirement: &70249603040980 !ruby/object:Gem::Requirement
|
85
86
|
none: false
|
86
87
|
requirements:
|
87
88
|
- - ! '>='
|
@@ -89,10 +90,21 @@ dependencies:
|
|
89
90
|
version: 1.4.6
|
90
91
|
type: :development
|
91
92
|
prerelease: false
|
92
|
-
version_requirements: *
|
93
|
+
version_requirements: *70249603040980
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rake
|
96
|
+
requirement: &70249603040300 !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0.9'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: *70249603040300
|
93
105
|
- !ruby/object:Gem::Dependency
|
94
106
|
name: rake-compiler
|
95
|
-
requirement: &
|
107
|
+
requirement: &70249603101660 !ruby/object:Gem::Requirement
|
96
108
|
none: false
|
97
109
|
requirements:
|
98
110
|
- - =
|
@@ -100,10 +112,10 @@ dependencies:
|
|
100
112
|
version: 0.8.0
|
101
113
|
type: :development
|
102
114
|
prerelease: false
|
103
|
-
version_requirements: *
|
115
|
+
version_requirements: *70249603101660
|
104
116
|
- !ruby/object:Gem::Dependency
|
105
117
|
name: rexical
|
106
|
-
requirement: &
|
118
|
+
requirement: &70249603100880 !ruby/object:Gem::Requirement
|
107
119
|
none: false
|
108
120
|
requirements:
|
109
121
|
- - ! '>='
|
@@ -111,10 +123,10 @@ dependencies:
|
|
111
123
|
version: 1.0.5
|
112
124
|
type: :development
|
113
125
|
prerelease: false
|
114
|
-
version_requirements: *
|
126
|
+
version_requirements: *70249603100880
|
115
127
|
- !ruby/object:Gem::Dependency
|
116
128
|
name: rdoc
|
117
|
-
requirement: &
|
129
|
+
requirement: &70249603100140 !ruby/object:Gem::Requirement
|
118
130
|
none: false
|
119
131
|
requirements:
|
120
132
|
- - ~>
|
@@ -122,10 +134,10 @@ dependencies:
|
|
122
134
|
version: '3.10'
|
123
135
|
type: :development
|
124
136
|
prerelease: false
|
125
|
-
version_requirements: *
|
137
|
+
version_requirements: *70249603100140
|
126
138
|
- !ruby/object:Gem::Dependency
|
127
139
|
name: hoe
|
128
|
-
requirement: &
|
140
|
+
requirement: &70249603099380 !ruby/object:Gem::Requirement
|
129
141
|
none: false
|
130
142
|
requirements:
|
131
143
|
- - ~>
|
@@ -133,7 +145,7 @@ dependencies:
|
|
133
145
|
version: '2.16'
|
134
146
|
type: :development
|
135
147
|
prerelease: false
|
136
|
-
version_requirements: *
|
148
|
+
version_requirements: *70249603099380
|
137
149
|
description: ! 'Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser. Among Nokogiri''s
|
138
150
|
|
139
151
|
many features is the ability to search documents via XPath or CSS3 selectors.
|
@@ -146,6 +158,7 @@ email:
|
|
146
158
|
- aaronp@rubyforge.org
|
147
159
|
- mike.dalessio@gmail.com
|
148
160
|
- yokolet@gmail.com
|
161
|
+
- tle@holymonkey.com
|
149
162
|
executables:
|
150
163
|
- nokogiri
|
151
164
|
extensions:
|
@@ -159,19 +172,13 @@ extra_rdoc_files:
|
|
159
172
|
- README.rdoc
|
160
173
|
- ext/nokogiri/html_element_description.c
|
161
174
|
- ext/nokogiri/html_entity_lookup.c
|
162
|
-
- ext/nokogiri/xml_attr.c
|
163
175
|
- ext/nokogiri/xml_attribute_decl.c
|
164
|
-
- ext/nokogiri/xml_cdata.c
|
165
|
-
- ext/nokogiri/xml_comment.c
|
166
|
-
- ext/nokogiri/xml_document_fragment.c
|
167
176
|
- ext/nokogiri/xml_dtd.c
|
168
177
|
- ext/nokogiri/xml_element_content.c
|
169
178
|
- ext/nokogiri/xml_element_decl.c
|
170
179
|
- ext/nokogiri/xml_encoding_handler.c
|
171
180
|
- ext/nokogiri/xml_entity_decl.c
|
172
|
-
- ext/nokogiri/xml_entity_reference.c
|
173
181
|
- ext/nokogiri/xml_libxml2_hacks.c
|
174
|
-
- ext/nokogiri/xml_processing_instruction.c
|
175
182
|
- ext/nokogiri/xml_sax_parser.c
|
176
183
|
- ext/nokogiri/st.c
|
177
184
|
- ext/nokogiri/xml_reader.c
|
@@ -181,17 +188,23 @@ extra_rdoc_files:
|
|
181
188
|
- ext/nokogiri/xml_syntax_error.c
|
182
189
|
- ext/nokogiri/html_document.c
|
183
190
|
- ext/nokogiri/html_sax_push_parser.c
|
184
|
-
- ext/nokogiri/nokogiri.c
|
185
191
|
- ext/nokogiri/xml_io.c
|
186
192
|
- ext/nokogiri/xml_namespace.c
|
187
|
-
- ext/nokogiri/xml_text.c
|
188
193
|
- ext/nokogiri/xslt_stylesheet.c
|
189
|
-
- ext/nokogiri/xml_xpath_context.c
|
190
194
|
- ext/nokogiri/xml_sax_parser_context.c
|
191
195
|
- ext/nokogiri/xml_node_set.c
|
196
|
+
- ext/nokogiri/html_sax_parser_context.c
|
197
|
+
- ext/nokogiri/xml_attr.c
|
198
|
+
- ext/nokogiri/xml_cdata.c
|
199
|
+
- ext/nokogiri/xml_comment.c
|
200
|
+
- ext/nokogiri/xml_document_fragment.c
|
201
|
+
- ext/nokogiri/xml_entity_reference.c
|
202
|
+
- ext/nokogiri/xml_processing_instruction.c
|
203
|
+
- ext/nokogiri/xml_text.c
|
204
|
+
- ext/nokogiri/xml_xpath_context.c
|
192
205
|
- ext/nokogiri/xml_node.c
|
193
206
|
- ext/nokogiri/xml_document.c
|
194
|
-
- ext/nokogiri/
|
207
|
+
- ext/nokogiri/nokogiri.c
|
195
208
|
files:
|
196
209
|
- .autotest
|
197
210
|
- .gemtest
|
@@ -451,7 +464,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
451
464
|
- !ruby/object:Gem::Version
|
452
465
|
version: '0'
|
453
466
|
requirements: []
|
454
|
-
rubyforge_project: maglev-
|
467
|
+
rubyforge_project: nokogiri-maglev-
|
455
468
|
rubygems_version: 1.8.11
|
456
469
|
signing_key:
|
457
470
|
specification_version: 3
|
@@ -490,7 +503,6 @@ test_files:
|
|
490
503
|
- test/xml/test_entity_decl.rb
|
491
504
|
- test/xml/test_entity_reference.rb
|
492
505
|
- test/xml/test_node_encoding.rb
|
493
|
-
- test/xml/test_parse_options.rb
|
494
506
|
- test/xml/test_processing_instruction.rb
|
495
507
|
- test/xml/test_relax_ng.rb
|
496
508
|
- test/xml/test_schema.rb
|
@@ -500,19 +512,20 @@ test_files:
|
|
500
512
|
- test/xml/test_c14n.rb
|
501
513
|
- test/xml/test_cdata.rb
|
502
514
|
- test/xml/test_document_encoding.rb
|
503
|
-
- test/xml/test_document_fragment.rb
|
504
515
|
- test/xml/test_namespace.rb
|
505
516
|
- test/xml/test_node_attributes.rb
|
506
517
|
- test/xml/test_node_inheritance.rb
|
507
518
|
- test/xml/test_node_reparenting.rb
|
508
|
-
- test/xml/test_node_set.rb
|
509
519
|
- test/xml/test_reader_encoding.rb
|
510
520
|
- test/xml/test_text.rb
|
511
521
|
- test/xml/test_unparented_node.rb
|
512
522
|
- test/xml/test_xinclude.rb
|
513
523
|
- test/xml/test_xpath.rb
|
514
|
-
- test/xml/test_node.rb
|
515
524
|
- test/xml/test_document.rb
|
525
|
+
- test/xml/test_document_fragment.rb
|
526
|
+
- test/xml/test_node_set.rb
|
527
|
+
- test/xml/test_parse_options.rb
|
528
|
+
- test/xml/test_node.rb
|
516
529
|
- test/xslt/test_exception_handling.rb
|
517
530
|
- test/xslt/test_custom_functions.rb
|
518
531
|
- test/test_nokogiri.rb
|