nokogiri 1.10.3 → 1.10.5
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/dependencies.yml +28 -26
- data/lib/nokogiri/css/tokenizer.rb +104 -103
- data/lib/nokogiri/version.rb +1 -1
- data/lib/nokogiri/xml/builder.rb +33 -30
- data/ports/archives/libxml2-2.9.10.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
- metadata +20 -7
- data/patches/libxslt/0001-Fix-security-framework-bypass.patch +0 -120
- data/ports/archives/libxml2-2.9.9.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.33.tar.gz +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d09078ee6949b248592e23a36f6aab7de47aefaf02f03056a5763214853f2c58
|
4
|
+
data.tar.gz: 1350d89ecb005263c7ed9432268385e2dca176866c1e065fdef1396a1978fa12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8a48d06cc6100c8ffa25b64ad6e3e4f839e8445a98191a4e1caef98d9f8fc648b6f1a578b79451b168141d166e4ba4c5a58c954b2805c4689983311f423eb15
|
7
|
+
data.tar.gz: bcafffbdfabf2370d543652b7b77f2b03c1c8ae6d9dbe1aaa05d042e619310ac861ee8458baab7ebe569f0d14ca6ec5bd60a4a379bd04aaf8dd8618d587be7ee
|
data/dependencies.yml
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
libxml2:
|
2
|
-
version: "2.9.
|
3
|
-
sha256: "
|
2
|
+
version: "2.9.10"
|
3
|
+
sha256: "aafee193ffb8fe0c82d4afef6ef91972cbaf5feea100edc2f262750611b4be1f"
|
4
4
|
# manually verified checksum:
|
5
5
|
#
|
6
|
-
# $ gpg --verify libxml2-2.9.
|
7
|
-
# gpg: Signature made
|
8
|
-
# gpg: using RSA key
|
6
|
+
# $ gpg --verify libxml2-2.9.10.tar.gz.asc ports/archives/libxml2-2.9.10.tar.gz
|
7
|
+
# gpg: Signature made Wed 30 Oct 2019 03:15:42 PM EDT
|
8
|
+
# gpg: using RSA key DB46681BB91ADCEA170FA2D415588B26596BEA5D
|
9
9
|
# gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>" [unknown]
|
10
10
|
# gpg: aka "Daniel Veillard <Daniel.Veillard@w3.org>" [unknown]
|
11
11
|
# gpg: WARNING: This key is not certified with a trusted signature!
|
@@ -16,25 +16,26 @@ libxml2:
|
|
16
16
|
# using this pgp signature:
|
17
17
|
#
|
18
18
|
# -----BEGIN PGP SIGNATURE-----
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
19
|
+
#
|
20
|
+
# iQEzBAABCAAdFiEE20ZoG7ka3OoXD6LUFViLJllr6l0FAl254V4ACgkQFViLJllr
|
21
|
+
# 6l0ldAf6Azt4/oKDfMKRd+xaykUrb+34dr2ZRsjRDS1cnelAtL9TCWhE5lOkLI3c
|
22
|
+
# 3FyNRaLhOEOOluZmKTJYyzS42JSSHDhxGj14gIeyafOjvRhHG3h1m5GvMmvgKWkd
|
23
|
+
# qzxFrVFSG26iWJxMvxIA88t7M+QHb7ff7xR29ETJscewEmAd3LmZITglK02lWeGz
|
24
|
+
# LfxfLuakM6RnCUu0dzacJKO0nMOKju+RL/N9bciI/UOhNYEkWqPnzC0GzbvFLqDu
|
25
|
+
# rM+OvCSewSTziiejpdrUwYXkY5Ui2+cxUbacLauEr8iRLg7xXKqv27NORE4yeQcS
|
26
|
+
# LgIhxG/qSNfihMS6E1ZO5bK2DbGCZQ==
|
27
|
+
# =ZNuc
|
27
28
|
# -----END PGP SIGNATURE-----
|
28
29
|
#
|
29
30
|
|
30
31
|
libxslt:
|
31
|
-
version: "1.1.
|
32
|
-
sha256: "
|
32
|
+
version: "1.1.34"
|
33
|
+
sha256: "98b1bd46d6792925ad2dfe9a87452ea2adebf69dcb9919ffd55bf926a7f93f7f"
|
33
34
|
# manually verified checksum:
|
34
35
|
#
|
35
|
-
# $ gpg --verify libxslt-1.1.
|
36
|
-
# gpg: Signature made
|
37
|
-
# gpg: using RSA key
|
36
|
+
# $ gpg --verify ~/Downloads/libxslt-1.1.34.tar.gz.asc ports/archives/libxslt-1.1.34.tar.gz
|
37
|
+
# gpg: Signature made Wed 30 Oct 2019 04:02:48 PM EDT
|
38
|
+
# gpg: using RSA key DB46681BB91ADCEA170FA2D415588B26596BEA5D
|
38
39
|
# gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>" [unknown]
|
39
40
|
# gpg: aka "Daniel Veillard <Daniel.Veillard@w3.org>" [unknown]
|
40
41
|
# gpg: WARNING: This key is not certified with a trusted signature!
|
@@ -45,14 +46,15 @@ libxslt:
|
|
45
46
|
# using this pgp signature:
|
46
47
|
#
|
47
48
|
# -----BEGIN PGP SIGNATURE-----
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
49
|
+
#
|
50
|
+
# iQEzBAABCAAdFiEE20ZoG7ka3OoXD6LUFViLJllr6l0FAl257GgACgkQFViLJllr
|
51
|
+
# 6l2vVggAjJEHmASiS56SxhPOsGqbfBihM66gQFoIymQfMu2430N1GSTkLsfbkJO8
|
52
|
+
# 8yBX11NjzK/m9uxwshMW3rVCU7EpL3PUimN3reXdPiQj9hAOAWF1V3BZNevbQC2E
|
53
|
+
# FCIraioukaidf8sjUG4/sGpK/gOcP/3hYoN0HUoBigCNJjDqhijxM3M3GJJtCASp
|
54
|
+
# jL4CQbs2OmxW8ixOZbuWEESvFFHUgYRsdZjRVN+GRfSOvJjxypurmYwQ3RjO7JxL
|
55
|
+
# 2FY8qKQ+xpeID8NV8F5OUEvWBjk1QS133VTqBZNlONdnEtV/og6jNu5k0O/Kvhup
|
56
|
+
# caR+8TMErOcLr9OgDklO6DoYyAsf9Q==
|
57
|
+
# =g4i4
|
56
58
|
# -----END PGP SIGNATURE-----
|
57
59
|
#
|
58
60
|
|
@@ -1,151 +1,152 @@
|
|
1
1
|
#--
|
2
2
|
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by rex 1.0.
|
3
|
+
# This file is automatically generated by rex 1.0.7
|
4
4
|
# from lexical definition file "lib/nokogiri/css/tokenizer.rex".
|
5
5
|
#++
|
6
6
|
|
7
7
|
module Nokogiri
|
8
8
|
module CSS
|
9
9
|
class Tokenizer # :nodoc:
|
10
|
-
|
10
|
+
require 'strscan'
|
11
11
|
|
12
|
-
|
12
|
+
class ScanError < StandardError ; end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
attr_reader :lineno
|
15
|
+
attr_reader :filename
|
16
|
+
attr_accessor :state
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
def scan_setup(str)
|
19
|
+
@ss = StringScanner.new(str)
|
20
|
+
@lineno = 1
|
21
|
+
@state = nil
|
22
|
+
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
def action
|
25
|
+
yield
|
26
|
+
end
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
28
|
+
def scan_str(str)
|
29
|
+
scan_setup(str)
|
30
|
+
do_parse
|
31
|
+
end
|
32
|
+
alias :scan :scan_str
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
def load_file( filename )
|
35
|
+
@filename = filename
|
36
|
+
File.open(filename, "r") do |f|
|
37
|
+
scan_setup(f.read)
|
38
|
+
end
|
39
|
+
end
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
def scan_file( filename )
|
42
|
+
load_file(filename)
|
43
|
+
do_parse
|
44
|
+
end
|
45
45
|
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
# skips empty actions
|
51
|
-
until token = _next_token or @ss.eos?; end
|
52
|
-
token
|
53
|
-
end
|
47
|
+
def next_token
|
48
|
+
return if @ss.eos?
|
54
49
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
when nil
|
60
|
-
case
|
61
|
-
when (text = @ss.scan(/has\([\s]*/))
|
62
|
-
action { [:HAS, text] }
|
50
|
+
# skips empty actions
|
51
|
+
until token = _next_token or @ss.eos?; end
|
52
|
+
token
|
53
|
+
end
|
63
54
|
|
64
|
-
|
65
|
-
|
55
|
+
def _next_token
|
56
|
+
text = @ss.peek(1)
|
57
|
+
@lineno += 1 if text == "\n"
|
58
|
+
token = case @state
|
59
|
+
when nil
|
60
|
+
case
|
61
|
+
when (text = @ss.scan(/has\([\s]*/))
|
62
|
+
action { [:HAS, text] }
|
66
63
|
|
67
|
-
|
68
|
-
|
64
|
+
when (text = @ss.scan(/[-@]?([_A-Za-z]|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s])?|\\[^\n\r\f0-9A-Fa-f])([_A-Za-z0-9-]|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s])?|\\[^\n\r\f0-9A-Fa-f])*\([\s]*/))
|
65
|
+
action { [:FUNCTION, text] }
|
69
66
|
|
70
|
-
|
71
|
-
|
67
|
+
when (text = @ss.scan(/[-@]?([_A-Za-z]|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s])?|\\[^\n\r\f0-9A-Fa-f])([_A-Za-z0-9-]|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s])?|\\[^\n\r\f0-9A-Fa-f])*/))
|
68
|
+
action { [:IDENT, text] }
|
72
69
|
|
73
|
-
|
74
|
-
|
70
|
+
when (text = @ss.scan(/\#([_A-Za-z0-9-]|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s])?|\\[^\n\r\f0-9A-Fa-f])+/))
|
71
|
+
action { [:HASH, text] }
|
75
72
|
|
76
|
-
|
77
|
-
|
73
|
+
when (text = @ss.scan(/[\s]*~=[\s]*/))
|
74
|
+
action { [:INCLUDES, text] }
|
78
75
|
|
79
|
-
|
80
|
-
|
76
|
+
when (text = @ss.scan(/[\s]*\|=[\s]*/))
|
77
|
+
action { [:DASHMATCH, text] }
|
81
78
|
|
82
|
-
|
83
|
-
|
79
|
+
when (text = @ss.scan(/[\s]*\^=[\s]*/))
|
80
|
+
action { [:PREFIXMATCH, text] }
|
84
81
|
|
85
|
-
|
86
|
-
|
82
|
+
when (text = @ss.scan(/[\s]*\$=[\s]*/))
|
83
|
+
action { [:SUFFIXMATCH, text] }
|
87
84
|
|
88
|
-
|
89
|
-
|
85
|
+
when (text = @ss.scan(/[\s]*\*=[\s]*/))
|
86
|
+
action { [:SUBSTRINGMATCH, text] }
|
90
87
|
|
91
|
-
|
92
|
-
|
88
|
+
when (text = @ss.scan(/[\s]*!=[\s]*/))
|
89
|
+
action { [:NOT_EQUAL, text] }
|
93
90
|
|
94
|
-
|
95
|
-
|
91
|
+
when (text = @ss.scan(/[\s]*=[\s]*/))
|
92
|
+
action { [:EQUAL, text] }
|
96
93
|
|
97
|
-
|
98
|
-
|
94
|
+
when (text = @ss.scan(/[\s]*\)/))
|
95
|
+
action { [:RPAREN, text] }
|
99
96
|
|
100
|
-
|
101
|
-
|
97
|
+
when (text = @ss.scan(/\[[\s]*/))
|
98
|
+
action { [:LSQUARE, text] }
|
102
99
|
|
103
|
-
|
104
|
-
|
100
|
+
when (text = @ss.scan(/[\s]*\]/))
|
101
|
+
action { [:RSQUARE, text] }
|
105
102
|
|
106
|
-
|
107
|
-
|
103
|
+
when (text = @ss.scan(/[\s]*\+[\s]*/))
|
104
|
+
action { [:PLUS, text] }
|
108
105
|
|
109
|
-
|
110
|
-
|
106
|
+
when (text = @ss.scan(/[\s]*>[\s]*/))
|
107
|
+
action { [:GREATER, text] }
|
111
108
|
|
112
|
-
|
113
|
-
|
109
|
+
when (text = @ss.scan(/[\s]*,[\s]*/))
|
110
|
+
action { [:COMMA, text] }
|
114
111
|
|
115
|
-
|
116
|
-
|
112
|
+
when (text = @ss.scan(/[\s]*~[\s]*/))
|
113
|
+
action { [:TILDE, text] }
|
117
114
|
|
118
|
-
|
119
|
-
|
115
|
+
when (text = @ss.scan(/\:not\([\s]*/))
|
116
|
+
action { [:NOT, text] }
|
120
117
|
|
121
|
-
|
122
|
-
|
118
|
+
when (text = @ss.scan(/-?([0-9]+|[0-9]*\.[0-9]+)/))
|
119
|
+
action { [:NUMBER, text] }
|
123
120
|
|
124
|
-
|
125
|
-
|
121
|
+
when (text = @ss.scan(/[\s]*\/\/[\s]*/))
|
122
|
+
action { [:DOUBLESLASH, text] }
|
126
123
|
|
127
|
-
|
128
|
-
|
124
|
+
when (text = @ss.scan(/[\s]*\/[\s]*/))
|
125
|
+
action { [:SLASH, text] }
|
129
126
|
|
130
|
-
|
131
|
-
|
127
|
+
when (text = @ss.scan(/U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})?/))
|
128
|
+
action {[:UNICODE_RANGE, text] }
|
132
129
|
|
133
|
-
|
134
|
-
|
130
|
+
when (text = @ss.scan(/[\s]+/))
|
131
|
+
action { [:S, text] }
|
135
132
|
|
136
|
-
|
137
|
-
|
133
|
+
when (text = @ss.scan(/"([^\n\r\f"]|\n|\r\n|\r|\f|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s])?|\\[^\n\r\f0-9A-Fa-f])*(?<!\\)(?:\\{2})*"|'([^\n\r\f']|\n|\r\n|\r|\f|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s])?|\\[^\n\r\f0-9A-Fa-f])*(?<!\\)(?:\\{2})*'/))
|
134
|
+
action { [:STRING, text] }
|
138
135
|
|
139
|
-
|
140
|
-
|
141
|
-
raise ScanError, "can not match: '" + text + "'"
|
142
|
-
end # if
|
136
|
+
when (text = @ss.scan(/./))
|
137
|
+
action { [text, text] }
|
143
138
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
139
|
+
|
140
|
+
else
|
141
|
+
text = @ss.string[@ss.pos .. -1]
|
142
|
+
raise ScanError, "can not match: '" + text + "'"
|
143
|
+
end # if
|
144
|
+
|
145
|
+
else
|
146
|
+
raise ScanError, "undefined state: '" + state.to_s + "'"
|
147
|
+
end # case state
|
148
|
+
token
|
149
|
+
end # def _next_token
|
149
150
|
|
150
151
|
end # class
|
151
152
|
end
|
data/lib/nokogiri/version.rb
CHANGED
data/lib/nokogiri/xml/builder.rb
CHANGED
@@ -213,7 +213,7 @@ module Nokogiri
|
|
213
213
|
# xml.foo
|
214
214
|
# end
|
215
215
|
# end
|
216
|
-
#
|
216
|
+
#
|
217
217
|
# puts builder.to_xml
|
218
218
|
#
|
219
219
|
# Will output this xml:
|
@@ -250,7 +250,7 @@ module Nokogiri
|
|
250
250
|
# xml.awesome # add the "awesome" tag below "some_tag"
|
251
251
|
# end
|
252
252
|
#
|
253
|
-
def self.with
|
253
|
+
def self.with(root, &block)
|
254
254
|
new({}, root, &block)
|
255
255
|
end
|
256
256
|
|
@@ -263,23 +263,25 @@ module Nokogiri
|
|
263
263
|
# Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
264
264
|
# ...
|
265
265
|
# end
|
266
|
-
def initialize
|
267
|
-
|
266
|
+
def initialize(options = {}, root = nil, &block)
|
268
267
|
if root
|
269
|
-
@doc
|
268
|
+
@doc = root.document
|
270
269
|
@parent = root
|
271
270
|
else
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
271
|
+
klassname = "::" + (self.class.name.split("::")[0..-2] + ["Document"]).join("::")
|
272
|
+
klass = begin
|
273
|
+
Object.const_get(klassname)
|
274
|
+
rescue NameError
|
275
|
+
Nokogiri::XML::Document
|
276
|
+
end
|
277
|
+
@parent = @doc = klass.new
|
276
278
|
end
|
277
279
|
|
278
|
-
@context
|
279
|
-
@arity
|
280
|
-
@ns
|
280
|
+
@context = nil
|
281
|
+
@arity = nil
|
282
|
+
@ns = nil
|
281
283
|
|
282
|
-
options.each do |k,v|
|
284
|
+
options.each do |k, v|
|
283
285
|
@doc.send(:"#{k}=", v)
|
284
286
|
end
|
285
287
|
|
@@ -287,7 +289,7 @@ module Nokogiri
|
|
287
289
|
|
288
290
|
@arity = block.arity
|
289
291
|
if @arity <= 0
|
290
|
-
@context = eval(
|
292
|
+
@context = eval("self", block.binding)
|
291
293
|
instance_eval(&block)
|
292
294
|
else
|
293
295
|
yield self
|
@@ -298,26 +300,26 @@ module Nokogiri
|
|
298
300
|
|
299
301
|
###
|
300
302
|
# Create a Text Node with content of +string+
|
301
|
-
def text
|
303
|
+
def text(string)
|
302
304
|
insert @doc.create_text_node(string)
|
303
305
|
end
|
304
306
|
|
305
307
|
###
|
306
308
|
# Create a CDATA Node with content of +string+
|
307
|
-
def cdata
|
309
|
+
def cdata(string)
|
308
310
|
insert doc.create_cdata(string)
|
309
311
|
end
|
310
312
|
|
311
313
|
###
|
312
314
|
# Create a Comment Node with content of +string+
|
313
|
-
def comment
|
315
|
+
def comment(string)
|
314
316
|
insert doc.create_comment(string)
|
315
317
|
end
|
316
318
|
|
317
319
|
###
|
318
320
|
# Build a tag that is associated with namespace +ns+. Raises an
|
319
321
|
# ArgumentError if +ns+ has not been defined higher in the tree.
|
320
|
-
def []
|
322
|
+
def [](ns)
|
321
323
|
if @parent != @doc
|
322
324
|
@ns = @parent.namespace_definitions.find { |x| x.prefix == ns.to_s }
|
323
325
|
end
|
@@ -348,15 +350,15 @@ module Nokogiri
|
|
348
350
|
|
349
351
|
###
|
350
352
|
# Append the given raw XML +string+ to the document
|
351
|
-
def <<
|
353
|
+
def <<(string)
|
352
354
|
@doc.fragment(string).children.each { |x| insert(x) }
|
353
355
|
end
|
354
356
|
|
355
|
-
def method_missing
|
357
|
+
def method_missing(method, *args, &block) # :nodoc:
|
356
358
|
if @context && @context.respond_to?(method)
|
357
359
|
@context.send(method, *args, &block)
|
358
360
|
else
|
359
|
-
node = @doc.create_element(method.to_s.sub(/[_!]$/,
|
361
|
+
node = @doc.create_element(method.to_s.sub(/[_!]$/, ""), *args) { |n|
|
360
362
|
# Set up the namespace
|
361
363
|
if @ns.is_a? Nokogiri::XML::Namespace
|
362
364
|
n.namespace = @ns
|
@@ -377,13 +379,14 @@ module Nokogiri
|
|
377
379
|
end
|
378
380
|
|
379
381
|
private
|
382
|
+
|
380
383
|
###
|
381
384
|
# Insert +node+ as a child of the current Node
|
382
385
|
def insert(node, &block)
|
383
386
|
node = @parent.add_child(node)
|
384
387
|
if block_given?
|
385
388
|
old_parent = @parent
|
386
|
-
@parent
|
389
|
+
@parent = node
|
387
390
|
@arity ||= block.arity
|
388
391
|
if @arity <= 0
|
389
392
|
instance_eval(&block)
|
@@ -396,16 +399,16 @@ module Nokogiri
|
|
396
399
|
end
|
397
400
|
|
398
401
|
class NodeBuilder # :nodoc:
|
399
|
-
def initialize
|
402
|
+
def initialize(node, doc_builder)
|
400
403
|
@node = node
|
401
404
|
@doc_builder = doc_builder
|
402
405
|
end
|
403
406
|
|
404
|
-
def []=
|
407
|
+
def []=(k, v)
|
405
408
|
@node[k] = v
|
406
409
|
end
|
407
410
|
|
408
|
-
def []
|
411
|
+
def [](k)
|
409
412
|
@node[k]
|
410
413
|
end
|
411
414
|
|
@@ -413,19 +416,19 @@ module Nokogiri
|
|
413
416
|
opts = args.last.is_a?(Hash) ? args.pop : {}
|
414
417
|
case method.to_s
|
415
418
|
when /^(.*)!$/
|
416
|
-
@node[
|
419
|
+
@node["id"] = $1
|
417
420
|
@node.content = args.first if args.first
|
418
421
|
when /^(.*)=/
|
419
422
|
@node[$1] = args.first
|
420
423
|
else
|
421
|
-
@node[
|
422
|
-
((@node[
|
424
|
+
@node["class"] =
|
425
|
+
((@node["class"] || "").split(/\s/) + [method.to_s]).join(" ")
|
423
426
|
@node.content = args.first if args.first
|
424
427
|
end
|
425
428
|
|
426
429
|
# Assign any extra options
|
427
|
-
opts.each do |k,v|
|
428
|
-
@node[k.to_s] = ((@node[k.to_s] ||
|
430
|
+
opts.each do |k, v|
|
431
|
+
@node[k.to_s] = ((@node[k.to_s] || "").split(/\s/) + [v]).join(" ")
|
429
432
|
end
|
430
433
|
|
431
434
|
if block_given?
|
Binary file
|
Binary file
|
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.10.
|
4
|
+
version: 1.10.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2019-
|
17
|
+
date: 2019-10-31 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: mini_portile2
|
@@ -184,6 +184,20 @@ dependencies:
|
|
184
184
|
- - "~>"
|
185
185
|
- !ruby/object:Gem::Version
|
186
186
|
version: 1.0.5
|
187
|
+
- !ruby/object:Gem::Dependency
|
188
|
+
name: rubocop
|
189
|
+
requirement: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - "~>"
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '0.73'
|
194
|
+
type: :development
|
195
|
+
prerelease: false
|
196
|
+
version_requirements: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - "~>"
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '0.73'
|
187
201
|
- !ruby/object:Gem::Dependency
|
188
202
|
name: simplecov
|
189
203
|
requirement: !ruby/object:Gem::Requirement
|
@@ -224,14 +238,14 @@ dependencies:
|
|
224
238
|
requirements:
|
225
239
|
- - "~>"
|
226
240
|
- !ruby/object:Gem::Version
|
227
|
-
version: '3.
|
241
|
+
version: '3.18'
|
228
242
|
type: :development
|
229
243
|
prerelease: false
|
230
244
|
version_requirements: !ruby/object:Gem::Requirement
|
231
245
|
requirements:
|
232
246
|
- - "~>"
|
233
247
|
- !ruby/object:Gem::Version
|
234
|
-
version: '3.
|
248
|
+
version: '3.18'
|
235
249
|
description: |-
|
236
250
|
Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser. Among
|
237
251
|
Nokogiri's many features is the ability to search documents via XPath
|
@@ -428,9 +442,8 @@ files:
|
|
428
442
|
- patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch
|
429
443
|
- patches/libxml2/0002-Remove-script-macro-support.patch
|
430
444
|
- patches/libxml2/0003-Update-entities-to-remove-handling-of-ssi.patch
|
431
|
-
-
|
432
|
-
- ports/archives/
|
433
|
-
- ports/archives/libxslt-1.1.33.tar.gz
|
445
|
+
- ports/archives/libxml2-2.9.10.tar.gz
|
446
|
+
- ports/archives/libxslt-1.1.34.tar.gz
|
434
447
|
homepage:
|
435
448
|
licenses:
|
436
449
|
- MIT
|
@@ -1,120 +0,0 @@
|
|
1
|
-
From e03553605b45c88f0b4b2980adfbbb8f6fca2fd6 Mon Sep 17 00:00:00 2001
|
2
|
-
From: Nick Wellnhofer <wellnhofer@aevum.de>
|
3
|
-
Date: Sun, 24 Mar 2019 09:51:39 +0100
|
4
|
-
Subject: [PATCH] Fix security framework bypass
|
5
|
-
|
6
|
-
xsltCheckRead and xsltCheckWrite return -1 in case of error but callers
|
7
|
-
don't check for this condition and allow access. With a specially
|
8
|
-
crafted URL, xsltCheckRead could be tricked into returning an error
|
9
|
-
because of a supposedly invalid URL that would still be loaded
|
10
|
-
succesfully later on.
|
11
|
-
|
12
|
-
Fixes #12.
|
13
|
-
|
14
|
-
Thanks to Felix Wilhelm for the report.
|
15
|
-
---
|
16
|
-
libxslt/documents.c | 18 ++++++++++--------
|
17
|
-
libxslt/imports.c | 9 +++++----
|
18
|
-
libxslt/transform.c | 9 +++++----
|
19
|
-
libxslt/xslt.c | 9 +++++----
|
20
|
-
4 files changed, 25 insertions(+), 20 deletions(-)
|
21
|
-
|
22
|
-
diff --git a/libxslt/documents.c b/libxslt/documents.c
|
23
|
-
index 3f3a731..4aad11b 100644
|
24
|
-
--- a/libxslt/documents.c
|
25
|
-
+++ b/libxslt/documents.c
|
26
|
-
@@ -296,10 +296,11 @@ xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI) {
|
27
|
-
int res;
|
28
|
-
|
29
|
-
res = xsltCheckRead(ctxt->sec, ctxt, URI);
|
30
|
-
- if (res == 0) {
|
31
|
-
- xsltTransformError(ctxt, NULL, NULL,
|
32
|
-
- "xsltLoadDocument: read rights for %s denied\n",
|
33
|
-
- URI);
|
34
|
-
+ if (res <= 0) {
|
35
|
-
+ if (res == 0)
|
36
|
-
+ xsltTransformError(ctxt, NULL, NULL,
|
37
|
-
+ "xsltLoadDocument: read rights for %s denied\n",
|
38
|
-
+ URI);
|
39
|
-
return(NULL);
|
40
|
-
}
|
41
|
-
}
|
42
|
-
@@ -372,10 +373,11 @@ xsltLoadStyleDocument(xsltStylesheetPtr style, const xmlChar *URI) {
|
43
|
-
int res;
|
44
|
-
|
45
|
-
res = xsltCheckRead(sec, NULL, URI);
|
46
|
-
- if (res == 0) {
|
47
|
-
- xsltTransformError(NULL, NULL, NULL,
|
48
|
-
- "xsltLoadStyleDocument: read rights for %s denied\n",
|
49
|
-
- URI);
|
50
|
-
+ if (res <= 0) {
|
51
|
-
+ if (res == 0)
|
52
|
-
+ xsltTransformError(NULL, NULL, NULL,
|
53
|
-
+ "xsltLoadStyleDocument: read rights for %s denied\n",
|
54
|
-
+ URI);
|
55
|
-
return(NULL);
|
56
|
-
}
|
57
|
-
}
|
58
|
-
diff --git a/libxslt/imports.c b/libxslt/imports.c
|
59
|
-
index 874870c..3783b24 100644
|
60
|
-
--- a/libxslt/imports.c
|
61
|
-
+++ b/libxslt/imports.c
|
62
|
-
@@ -130,10 +130,11 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) {
|
63
|
-
int secres;
|
64
|
-
|
65
|
-
secres = xsltCheckRead(sec, NULL, URI);
|
66
|
-
- if (secres == 0) {
|
67
|
-
- xsltTransformError(NULL, NULL, NULL,
|
68
|
-
- "xsl:import: read rights for %s denied\n",
|
69
|
-
- URI);
|
70
|
-
+ if (secres <= 0) {
|
71
|
-
+ if (secres == 0)
|
72
|
-
+ xsltTransformError(NULL, NULL, NULL,
|
73
|
-
+ "xsl:import: read rights for %s denied\n",
|
74
|
-
+ URI);
|
75
|
-
goto error;
|
76
|
-
}
|
77
|
-
}
|
78
|
-
diff --git a/libxslt/transform.c b/libxslt/transform.c
|
79
|
-
index 1379391..0636dbd 100644
|
80
|
-
--- a/libxslt/transform.c
|
81
|
-
+++ b/libxslt/transform.c
|
82
|
-
@@ -3493,10 +3493,11 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
|
83
|
-
*/
|
84
|
-
if (ctxt->sec != NULL) {
|
85
|
-
ret = xsltCheckWrite(ctxt->sec, ctxt, filename);
|
86
|
-
- if (ret == 0) {
|
87
|
-
- xsltTransformError(ctxt, NULL, inst,
|
88
|
-
- "xsltDocumentElem: write rights for %s denied\n",
|
89
|
-
- filename);
|
90
|
-
+ if (ret <= 0) {
|
91
|
-
+ if (ret == 0)
|
92
|
-
+ xsltTransformError(ctxt, NULL, inst,
|
93
|
-
+ "xsltDocumentElem: write rights for %s denied\n",
|
94
|
-
+ filename);
|
95
|
-
xmlFree(URL);
|
96
|
-
xmlFree(filename);
|
97
|
-
return;
|
98
|
-
diff --git a/libxslt/xslt.c b/libxslt/xslt.c
|
99
|
-
index 780a5ad..a234eb7 100644
|
100
|
-
--- a/libxslt/xslt.c
|
101
|
-
+++ b/libxslt/xslt.c
|
102
|
-
@@ -6763,10 +6763,11 @@ xsltParseStylesheetFile(const xmlChar* filename) {
|
103
|
-
int res;
|
104
|
-
|
105
|
-
res = xsltCheckRead(sec, NULL, filename);
|
106
|
-
- if (res == 0) {
|
107
|
-
- xsltTransformError(NULL, NULL, NULL,
|
108
|
-
- "xsltParseStylesheetFile: read rights for %s denied\n",
|
109
|
-
- filename);
|
110
|
-
+ if (res <= 0) {
|
111
|
-
+ if (res == 0)
|
112
|
-
+ xsltTransformError(NULL, NULL, NULL,
|
113
|
-
+ "xsltParseStylesheetFile: read rights for %s denied\n",
|
114
|
-
+ filename);
|
115
|
-
return(NULL);
|
116
|
-
}
|
117
|
-
}
|
118
|
-
--
|
119
|
-
2.17.1
|
120
|
-
|
Binary file
|
Binary file
|