sanitize 4.1.0 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/HISTORY.md +45 -0
- data/lib/sanitize/config/relaxed.rb +29 -1
- data/lib/sanitize/config.rb +1 -1
- data/lib/sanitize/transformers/clean_doctype.rb +7 -1
- data/lib/sanitize/version.rb +1 -1
- data/lib/sanitize.rb +3 -3
- data/test/test_sanitize.rb +11 -0
- data/test/test_transformers.rb +6 -0
- metadata +9 -38
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: db18b3287fbfa069e318719e3cc99a3b60adc96c31824bb8953aba9f05cd1a48
|
|
4
|
+
data.tar.gz: ff8199fdae234ad4657a26d8f47708a9ce349b189170c9df15be39b2ea8e7e45
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d3b9492b4443779688f09d6a56c730261ccf82af47601dc4dbc525d243626eaf615355a01b5e05a808749c52ac0f6b9a433ad1906a023c2a57c5a8b588bc1c74
|
|
7
|
+
data.tar.gz: 03bdf142b612acb05ffe7560443594fef0bcbe24b68b93e8e89f4b3460e8ce70abcabb7f8a08e7ec8a57036bd73eb37579452a811240560690d400f60f436b7b
|
data/HISTORY.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# Sanitize History
|
|
2
2
|
|
|
3
|
+
## 4.6.0 (2018-01-29)
|
|
4
|
+
|
|
5
|
+
* Loosened the Nokogumbo dependency to allow installing semver-compatible
|
|
6
|
+
versions greater than or equal to v1.4. [@rafbm - #171][171]
|
|
7
|
+
|
|
8
|
+
[171]:https://github.com/rgrove/sanitize/pull/171
|
|
9
|
+
|
|
10
|
+
## 4.5.0 (2017-06-04)
|
|
11
|
+
|
|
12
|
+
* Added SVG-related CSS properties to the relaxed config. See [the diff][161]
|
|
13
|
+
for the full list of added properties. [@louim - #161][161]
|
|
14
|
+
|
|
15
|
+
* Fixed: Sanitize now strips null bytes (`\u0000`) before passing input to
|
|
16
|
+
Nokogumbo, since they can cause recent versions to crash with a failed
|
|
17
|
+
assertion in the Gumbo parser.
|
|
18
|
+
|
|
19
|
+
[161]:https://github.com/rgrove/sanitize/pull/161
|
|
20
|
+
|
|
21
|
+
## 4.4.0 (2016-09-29)
|
|
22
|
+
|
|
23
|
+
* Added `srcset` to the attribute whitelist for `img` elements in the relaxed
|
|
24
|
+
config. [@ejtttje - #156][156]
|
|
25
|
+
|
|
26
|
+
[156]:https://github.com/rgrove/sanitize/pull/156
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
## 4.3.0 (2016-09-20)
|
|
30
|
+
|
|
31
|
+
* Methods can now be used as transformers. [@Skipants - #155][155]
|
|
32
|
+
|
|
33
|
+
[155]:https://github.com/rgrove/sanitize/pull/155
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## 4.2.0 (2016-08-22)
|
|
37
|
+
|
|
38
|
+
* Added `-webkit-font-smoothing` to the relaxed CSS config. [@louim - #154][154]
|
|
39
|
+
|
|
40
|
+
* Fixed: Nokogumbo >=1.4.9 changed its behavior in a way that allowed invalid
|
|
41
|
+
doctypes (like `<!DOCTYPE nonsense>`) when the `:allow_doctype` config setting
|
|
42
|
+
was `true`. Invalid doctypes are now coerced to valid ones as they were prior
|
|
43
|
+
to this Nokogumbo change.
|
|
44
|
+
|
|
45
|
+
[154]:https://github.com/rgrove/sanitize/pull/154
|
|
46
|
+
|
|
47
|
+
|
|
3
48
|
## 4.1.0 (2016-06-17)
|
|
4
49
|
|
|
5
50
|
* Added a new CSS config setting, `:import_url_validator`. This is a Proc or
|
|
@@ -19,7 +19,7 @@ class Sanitize
|
|
|
19
19
|
'colgroup' => %w[span width],
|
|
20
20
|
'data' => %w[value],
|
|
21
21
|
'del' => %w[cite datetime],
|
|
22
|
-
'img' => %w[align alt border height src width],
|
|
22
|
+
'img' => %w[align alt border height src srcset width],
|
|
23
23
|
'ins' => %w[cite datetime],
|
|
24
24
|
'li' => %w[value],
|
|
25
25
|
'ol' => %w[reversed start type],
|
|
@@ -254,6 +254,7 @@ class Sanitize
|
|
|
254
254
|
-webkit-flow-from
|
|
255
255
|
-webkit-flow-into
|
|
256
256
|
-webkit-font-size-delta
|
|
257
|
+
-webkit-font-smoothing
|
|
257
258
|
-webkit-grid-area
|
|
258
259
|
-webkit-grid-auto-columns
|
|
259
260
|
-webkit-grid-auto-flow
|
|
@@ -430,7 +431,10 @@ class Sanitize
|
|
|
430
431
|
clip-path
|
|
431
432
|
clip-rule
|
|
432
433
|
color
|
|
434
|
+
color-interpolation
|
|
433
435
|
color-interpolation-filters
|
|
436
|
+
color-profile
|
|
437
|
+
color-rendering
|
|
434
438
|
column-count
|
|
435
439
|
column-fill
|
|
436
440
|
column-gap
|
|
@@ -459,6 +463,10 @@ class Sanitize
|
|
|
459
463
|
dominant-baseline
|
|
460
464
|
elevation
|
|
461
465
|
empty-cells
|
|
466
|
+
enable-background
|
|
467
|
+
fill
|
|
468
|
+
fill-opacity
|
|
469
|
+
fill-rule
|
|
462
470
|
filter
|
|
463
471
|
flex
|
|
464
472
|
flex-basis
|
|
@@ -491,6 +499,8 @@ class Sanitize
|
|
|
491
499
|
font-variant-numeric
|
|
492
500
|
font-variant-position
|
|
493
501
|
font-weight
|
|
502
|
+
glyph-orientation-horizontal
|
|
503
|
+
glyph-orientation-vertical
|
|
494
504
|
grid
|
|
495
505
|
grid-area
|
|
496
506
|
grid-auto-columns
|
|
@@ -519,6 +529,7 @@ class Sanitize
|
|
|
519
529
|
justify-content
|
|
520
530
|
justify-items
|
|
521
531
|
justify-self
|
|
532
|
+
kerning
|
|
522
533
|
left
|
|
523
534
|
letter-spacing
|
|
524
535
|
lighting-color
|
|
@@ -540,8 +551,12 @@ class Sanitize
|
|
|
540
551
|
margin-left
|
|
541
552
|
margin-right
|
|
542
553
|
margin-top
|
|
554
|
+
marker
|
|
555
|
+
marker-end
|
|
556
|
+
marker-mid
|
|
543
557
|
marker-offset
|
|
544
558
|
marker-side
|
|
559
|
+
marker-start
|
|
545
560
|
marks
|
|
546
561
|
mask
|
|
547
562
|
mask-box
|
|
@@ -601,6 +616,7 @@ class Sanitize
|
|
|
601
616
|
pitch
|
|
602
617
|
pitch-range
|
|
603
618
|
play-during
|
|
619
|
+
pointer-events
|
|
604
620
|
position
|
|
605
621
|
presentation-level
|
|
606
622
|
quotes
|
|
@@ -619,6 +635,7 @@ class Sanitize
|
|
|
619
635
|
shape-image-threshold
|
|
620
636
|
shape-margin
|
|
621
637
|
shape-outside
|
|
638
|
+
shape-rendering
|
|
622
639
|
size
|
|
623
640
|
speak
|
|
624
641
|
speak-as
|
|
@@ -626,12 +643,23 @@ class Sanitize
|
|
|
626
643
|
speak-numeral
|
|
627
644
|
speak-punctuation
|
|
628
645
|
speech-rate
|
|
646
|
+
stop-color
|
|
647
|
+
stop-opacity
|
|
629
648
|
stress
|
|
630
649
|
string-set
|
|
650
|
+
stroke
|
|
651
|
+
stroke-dasharray
|
|
652
|
+
stroke-dashoffset
|
|
653
|
+
stroke-linecap
|
|
654
|
+
stroke-linejoin
|
|
655
|
+
stroke-miterlimit
|
|
656
|
+
stroke-opacity
|
|
657
|
+
stroke-width
|
|
631
658
|
tab-size
|
|
632
659
|
table-layout
|
|
633
660
|
text-align
|
|
634
661
|
text-align-last
|
|
662
|
+
text-anchor
|
|
635
663
|
text-combine-horizontal
|
|
636
664
|
text-combine-upright
|
|
637
665
|
text-decoration
|
data/lib/sanitize/config.rb
CHANGED
|
@@ -52,7 +52,7 @@ class Sanitize
|
|
|
52
52
|
# Returns `true` if `dup` may be safely called on _value_, `false`
|
|
53
53
|
# otherwise.
|
|
54
54
|
def self.can_dupe?(value)
|
|
55
|
-
!(true == value || false == value || value.nil? || Numeric === value || Symbol === value)
|
|
55
|
+
!(true == value || false == value || value.nil? || Method === value || Numeric === value || Symbol === value)
|
|
56
56
|
end
|
|
57
57
|
private_class_method :can_dupe?
|
|
58
58
|
|
|
@@ -3,10 +3,16 @@
|
|
|
3
3
|
class Sanitize; module Transformers
|
|
4
4
|
|
|
5
5
|
CleanDoctype = lambda do |env|
|
|
6
|
+
return if env[:is_whitelisted]
|
|
7
|
+
|
|
6
8
|
node = env[:node]
|
|
7
9
|
|
|
8
10
|
if node.type == Nokogiri::XML::Node::DTD_NODE
|
|
9
|
-
|
|
11
|
+
if env[:config][:allow_doctype]
|
|
12
|
+
node.name = 'html'
|
|
13
|
+
else
|
|
14
|
+
node.unlink
|
|
15
|
+
end
|
|
10
16
|
end
|
|
11
17
|
end
|
|
12
18
|
|
data/lib/sanitize/version.rb
CHANGED
data/lib/sanitize.rb
CHANGED
|
@@ -30,7 +30,7 @@ class Sanitize
|
|
|
30
30
|
# it to the parser.
|
|
31
31
|
#
|
|
32
32
|
# http://www.w3.org/TR/unicode-xml/#Charlist
|
|
33
|
-
REGEX_UNSUITABLE_CHARS = /[\u0340\u0341\u17a3\u17d3\u2028\u2029\u202a-\u202e\u206a-\u206f\ufff9-\ufffb\ufeff\ufffc\u{1d173}-\u{1d17a}\u{e0000}-\u{e007f}]/u
|
|
33
|
+
REGEX_UNSUITABLE_CHARS = /[\u0000\u0340\u0341\u17a3\u17d3\u2028\u2029\u202a-\u202e\u206a-\u206f\ufff9-\ufffb\ufeff\ufffc\u{1d173}-\u{1d17a}\u{e0000}-\u{e007f}]/u
|
|
34
34
|
|
|
35
35
|
#--
|
|
36
36
|
# Class Methods
|
|
@@ -77,12 +77,11 @@ class Sanitize
|
|
|
77
77
|
def initialize(config = {})
|
|
78
78
|
@config = Config.merge(Config::DEFAULT, config)
|
|
79
79
|
|
|
80
|
-
@transformers = Array(@config[:transformers].dup
|
|
80
|
+
@transformers = Array(@config[:transformers]).dup
|
|
81
81
|
|
|
82
82
|
# Default transformers always run at the end of the chain, after any custom
|
|
83
83
|
# transformers.
|
|
84
84
|
@transformers << Transformers::CleanComment unless @config[:allow_comments]
|
|
85
|
-
@transformers << Transformers::CleanDoctype unless @config[:allow_doctype]
|
|
86
85
|
|
|
87
86
|
if @config[:elements].include?('style')
|
|
88
87
|
scss = Sanitize::CSS.new(config)
|
|
@@ -95,6 +94,7 @@ class Sanitize
|
|
|
95
94
|
end
|
|
96
95
|
|
|
97
96
|
@transformers <<
|
|
97
|
+
Transformers::CleanDoctype <<
|
|
98
98
|
Transformers::CleanCDATA <<
|
|
99
99
|
Transformers::CleanElement.new(@config)
|
|
100
100
|
end
|
data/test/test_sanitize.rb
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
require_relative 'common'
|
|
3
3
|
|
|
4
4
|
describe 'Sanitize' do
|
|
5
|
+
describe 'initializer' do
|
|
6
|
+
it 'should not modify a transformers array in the given config' do
|
|
7
|
+
transformers = [
|
|
8
|
+
lambda {}
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
Sanitize.new({ :transformers => transformers })
|
|
12
|
+
transformers.length.must_equal(1)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
5
16
|
describe 'instance methods' do
|
|
6
17
|
before do
|
|
7
18
|
@s = Sanitize.new
|
data/test/test_transformers.rb
CHANGED
|
@@ -77,6 +77,12 @@ describe 'Transformers' do
|
|
|
77
77
|
called.must_equal true
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
+
it 'should accept a method transformer' do
|
|
81
|
+
def transformer(env); end
|
|
82
|
+
Sanitize.fragment('<div>foo</div>', :transformers => method(:transformer))
|
|
83
|
+
.must_equal(' foo ')
|
|
84
|
+
end
|
|
85
|
+
|
|
80
86
|
describe 'Image whitelist transformer' do
|
|
81
87
|
require 'uri'
|
|
82
88
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sanitize
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ryan Grove
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2018-01-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: crass
|
|
@@ -44,70 +44,42 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 1.4
|
|
47
|
+
version: '1.4'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 1.4
|
|
54
|
+
version: '1.4'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: minitest
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 5.
|
|
61
|
+
version: 5.10.2
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 5.
|
|
68
|
+
version: 5.10.2
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: rake
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
75
|
+
version: 12.0.0
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: redcarpet
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: 3.2.3
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: 3.2.3
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: yard
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: 0.8.7
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: 0.8.7
|
|
82
|
+
version: 12.0.0
|
|
111
83
|
description: Sanitize is a whitelist-based HTML and CSS sanitizer. Given a list of
|
|
112
84
|
acceptable elements, attributes, and CSS properties, Sanitize will remove all unacceptable
|
|
113
85
|
HTML and/or CSS from a string.
|
|
@@ -165,9 +137,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
165
137
|
version: 1.2.0
|
|
166
138
|
requirements: []
|
|
167
139
|
rubyforge_project:
|
|
168
|
-
rubygems_version: 2.
|
|
140
|
+
rubygems_version: 2.7.3
|
|
169
141
|
signing_key:
|
|
170
142
|
specification_version: 4
|
|
171
143
|
summary: Whitelist-based HTML and CSS sanitizer.
|
|
172
144
|
test_files: []
|
|
173
|
-
has_rdoc:
|