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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: db5b47018757eca02968cca236fae793558f28a3
4
- data.tar.gz: 2556f1ebfb26b038190f334a39aff61315cd57b0
2
+ SHA256:
3
+ metadata.gz: db18b3287fbfa069e318719e3cc99a3b60adc96c31824bb8953aba9f05cd1a48
4
+ data.tar.gz: ff8199fdae234ad4657a26d8f47708a9ce349b189170c9df15be39b2ea8e7e45
5
5
  SHA512:
6
- metadata.gz: 2ddad668c07d8440a7e3bd4ccf4a066f6c1f0a7d9aeb8a0f43bd04569c8b5dd7959130d50c0725f902fa6f1bf8ed930b4d00ee4fa977f3364702d53387463b39
7
- data.tar.gz: 677279ef0d92a8e1d96e1ac28cfa12a5e4934887952a75dc891a5f37014352b8369f5effc1e480a10ae10363724840dbb1a9b5ec7b60b317a501ec370811d5b4
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
@@ -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
- node.unlink unless env[:is_whitelisted]
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
 
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  class Sanitize
4
- VERSION = '4.1.0'
4
+ VERSION = '4.6.0'
5
5
  end
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
@@ -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
@@ -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.1.0
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: 2016-07-17 00:00:00.000000000 Z
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.1
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.1
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.6.0
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.6.0
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: 10.4.2
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: 10.4.2
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.5.1
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: