rails-html-sanitizer 1.4.3 → 1.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.

Potentially problematic release.


This version of rails-html-sanitizer might be problematic. Click here for more details.

@@ -1,11 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "minitest/autorun"
2
4
  require "rails-html-sanitizer"
3
5
 
4
6
  class ScrubberTest < Minitest::Test
5
7
  protected
8
+ def scrub_fragment(html)
9
+ Loofah.scrub_fragment(html, @scrubber).to_s
10
+ end
6
11
 
7
12
  def assert_scrubbed(html, expected = html)
8
- output = Loofah.scrub_fragment(html, @scrubber).to_s
13
+ output = scrub_fragment(html)
9
14
  assert_equal expected, output
10
15
  end
11
16
 
@@ -28,9 +33,8 @@ class ScrubberTest < Minitest::Test
28
33
  end
29
34
 
30
35
  class PermitScrubberTest < ScrubberTest
31
-
32
36
  def setup
33
- @scrubber = Rails::Html::PermitScrubber.new
37
+ @scrubber = Rails::HTML::PermitScrubber.new
34
38
  end
35
39
 
36
40
  def test_responds_to_scrub
@@ -38,44 +42,60 @@ class PermitScrubberTest < ScrubberTest
38
42
  end
39
43
 
40
44
  def test_default_scrub_behavior
41
- assert_scrubbed '<tag>hello</tag>', 'hello'
45
+ assert_scrubbed "<tag>hello</tag>", "hello"
42
46
  end
43
47
 
44
48
  def test_default_scrub_removes_comments
45
- assert_scrubbed('<div>one</div><!-- two --><span>three</span>',
46
- '<div>one</div><span>three</span>')
49
+ assert_scrubbed("<div>one</div><!-- two --><span>three</span>",
50
+ "<div>one</div><span>three</span>")
47
51
  end
48
52
 
49
53
  def test_default_scrub_removes_processing_instructions
50
- assert_scrubbed('<div>one</div><?div two><span>three</span>',
51
- '<div>one</div><span>three</span>')
54
+ input = "<div>one</div><?div two><span>three</span>"
55
+ result = scrub_fragment(input)
56
+
57
+ acceptable_results = [
58
+ # jruby cyberneko (nokogiri < 1.14.0)
59
+ "<div>one</div>",
60
+ # everything else
61
+ "<div>one</div><span>three</span>",
62
+ ]
63
+
64
+ assert_includes(acceptable_results, result)
52
65
  end
53
66
 
54
67
  def test_default_attributes_removal_behavior
55
- assert_scrubbed '<p cooler="hello">hello</p>', '<p>hello</p>'
68
+ assert_scrubbed '<p cooler="hello">hello</p>', "<p>hello</p>"
56
69
  end
57
70
 
58
71
  def test_leaves_supplied_tags
59
72
  @scrubber.tags = %w(a)
60
- assert_scrubbed '<a>hello</a>'
73
+ assert_scrubbed "<a>hello</a>"
61
74
  end
62
75
 
63
76
  def test_leaves_only_supplied_tags
64
- html = '<tag>leave me <span>now</span></tag>'
77
+ html = "<tag>leave me <span>now</span></tag>"
65
78
  @scrubber.tags = %w(tag)
66
- assert_scrubbed html, '<tag>leave me now</tag>'
79
+ assert_scrubbed html, "<tag>leave me now</tag>"
80
+ end
81
+
82
+ def test_prunes_tags
83
+ @scrubber = Rails::HTML::PermitScrubber.new(prune: true)
84
+ @scrubber.tags = %w(tag)
85
+ html = "<tag>leave me <span>now</span></tag>"
86
+ assert_scrubbed html, "<tag>leave me </tag>"
67
87
  end
68
88
 
69
89
  def test_leaves_comments_when_supplied_as_tag
70
90
  @scrubber.tags = %w(div comment)
71
- assert_scrubbed('<div>one</div><!-- two --><span>three</span>',
72
- '<div>one</div><!-- two -->three')
91
+ assert_scrubbed("<div>one</div><!-- two --><span>three</span>",
92
+ "<div>one</div><!-- two -->three")
73
93
  end
74
94
 
75
95
  def test_leaves_only_supplied_tags_nested
76
- html = '<tag>leave <em>me <span>now</span></em></tag>'
96
+ html = "<tag>leave <em>me <span>now</span></em></tag>"
77
97
  @scrubber.tags = %w(tag)
78
- assert_scrubbed html, '<tag>leave me now</tag>'
98
+ assert_scrubbed html, "<tag>leave me now</tag>"
79
99
  end
80
100
 
81
101
  def test_leaves_supplied_attributes
@@ -102,16 +122,16 @@ class PermitScrubberTest < ScrubberTest
102
122
  end
103
123
 
104
124
  def test_leaves_text
105
- assert_scrubbed('some text')
125
+ assert_scrubbed("some text")
106
126
  end
107
127
 
108
128
  def test_skips_text_nodes
109
- assert_node_skipped('some text')
129
+ assert_node_skipped("some text")
110
130
  end
111
131
 
112
132
  def test_tags_accessor_validation
113
133
  e = assert_raises(ArgumentError) do
114
- @scrubber.tags = 'tag'
134
+ @scrubber.tags = "tag"
115
135
  end
116
136
 
117
137
  assert_equal "You should pass :tags as an Enumerable", e.message
@@ -120,7 +140,7 @@ class PermitScrubberTest < ScrubberTest
120
140
 
121
141
  def test_attributes_accessor_validation
122
142
  e = assert_raises(ArgumentError) do
123
- @scrubber.attributes = 'cooler'
143
+ @scrubber.attributes = "cooler"
124
144
  end
125
145
 
126
146
  assert_equal "You should pass :attributes as an Enumerable", e.message
@@ -130,19 +150,19 @@ end
130
150
 
131
151
  class TargetScrubberTest < ScrubberTest
132
152
  def setup
133
- @scrubber = Rails::Html::TargetScrubber.new
153
+ @scrubber = Rails::HTML::TargetScrubber.new
134
154
  end
135
155
 
136
156
  def test_targeting_tags_removes_only_them
137
157
  @scrubber.tags = %w(a h1)
138
- html = '<script></script><a></a><h1></h1>'
139
- assert_scrubbed html, '<script></script>'
158
+ html = "<script></script><a></a><h1></h1>"
159
+ assert_scrubbed html, "<script></script>"
140
160
  end
141
161
 
142
162
  def test_targeting_tags_removes_only_them_nested
143
163
  @scrubber.tags = %w(a)
144
- html = '<tag><a><tag><a></a></tag></a></tag>'
145
- assert_scrubbed html, '<tag><tag></tag></tag>'
164
+ html = "<tag><a><tag><a></a></tag></a></tag>"
165
+ assert_scrubbed html, "<tag><tag></tag></tag>"
146
166
  end
147
167
 
148
168
  def test_targeting_attributes_removes_only_them
@@ -157,24 +177,31 @@ class TargetScrubberTest < ScrubberTest
157
177
  html = '<tag remove="" other=""></tag><a remove="" other=""></a>'
158
178
  assert_scrubbed html, '<a other=""></a>'
159
179
  end
180
+
181
+ def test_prunes_tags
182
+ @scrubber = Rails::HTML::TargetScrubber.new(prune: true)
183
+ @scrubber.tags = %w(span)
184
+ html = "<tag>leave me <span>now</span></tag>"
185
+ assert_scrubbed html, "<tag>leave me </tag>"
186
+ end
160
187
  end
161
188
 
162
189
  class TextOnlyScrubberTest < ScrubberTest
163
190
  def setup
164
- @scrubber = Rails::Html::TextOnlyScrubber.new
191
+ @scrubber = Rails::HTML::TextOnlyScrubber.new
165
192
  end
166
193
 
167
194
  def test_removes_all_tags_and_keep_the_content
168
- assert_scrubbed '<tag>hello</tag>', 'hello'
195
+ assert_scrubbed "<tag>hello</tag>", "hello"
169
196
  end
170
197
 
171
198
  def test_skips_text_nodes
172
- assert_node_skipped('some text')
199
+ assert_node_skipped("some text")
173
200
  end
174
201
  end
175
202
 
176
203
  class ReturningStopFromScrubNodeTest < ScrubberTest
177
- class ScrubStopper < Rails::Html::PermitScrubber
204
+ class ScrubStopper < Rails::HTML::PermitScrubber
178
205
  def scrub_node(node)
179
206
  Loofah::Scrubber::STOP
180
207
  end
@@ -185,6 +212,6 @@ class ReturningStopFromScrubNodeTest < ScrubberTest
185
212
  end
186
213
 
187
214
  def test_returns_stop_from_scrub_if_scrub_node_does
188
- assert_scrub_stopped '<script>remove me</script>'
215
+ assert_scrub_stopped "<script>remove me</script>"
189
216
  end
190
217
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-html-sanitizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafael Mendonça França
8
8
  - Kasper Timm Hansen
9
+ - Mike Dalessio
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2022-06-09 00:00:00.000000000 Z
13
+ date: 2023-05-26 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: loofah
@@ -17,74 +18,33 @@ dependencies:
17
18
  requirements:
18
19
  - - "~>"
19
20
  - !ruby/object:Gem::Version
20
- version: '2.3'
21
+ version: '2.21'
21
22
  type: :runtime
22
23
  prerelease: false
23
24
  version_requirements: !ruby/object:Gem::Requirement
24
25
  requirements:
25
26
  - - "~>"
26
27
  - !ruby/object:Gem::Version
27
- version: '2.3'
28
+ version: '2.21'
28
29
  - !ruby/object:Gem::Dependency
29
- name: bundler
30
+ name: nokogiri
30
31
  requirement: !ruby/object:Gem::Requirement
31
32
  requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: '1.3'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: '1.3'
42
- - !ruby/object:Gem::Dependency
43
- name: rake
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: '0'
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: '0'
56
- - !ruby/object:Gem::Dependency
57
- name: minitest
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- - !ruby/object:Gem::Dependency
71
- name: rails-dom-testing
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ">="
33
+ - - "~>"
75
34
  - !ruby/object:Gem::Version
76
- version: '0'
77
- type: :development
35
+ version: '1.14'
36
+ type: :runtime
78
37
  prerelease: false
79
38
  version_requirements: !ruby/object:Gem::Requirement
80
39
  requirements:
81
- - - ">="
40
+ - - "~>"
82
41
  - !ruby/object:Gem::Version
83
- version: '0'
42
+ version: '1.14'
84
43
  description: HTML sanitization for Rails applications
85
44
  email:
86
45
  - rafaelmfranca@gmail.com
87
46
  - kaspth@gmail.com
47
+ - mike.dalessio@gmail.com
88
48
  executables: []
89
49
  extensions: []
90
50
  extra_rdoc_files: []
@@ -96,6 +56,7 @@ files:
96
56
  - lib/rails/html/sanitizer.rb
97
57
  - lib/rails/html/sanitizer/version.rb
98
58
  - lib/rails/html/scrubbers.rb
59
+ - test/rails_api_test.rb
99
60
  - test/sanitizer_test.rb
100
61
  - test/scrubbers_test.rb
101
62
  homepage: https://github.com/rails/rails-html-sanitizer
@@ -103,9 +64,9 @@ licenses:
103
64
  - MIT
104
65
  metadata:
105
66
  bug_tracker_uri: https://github.com/rails/rails-html-sanitizer/issues
106
- changelog_uri: https://github.com/rails/rails-html-sanitizer/blob/v1.4.3/CHANGELOG.md
107
- documentation_uri: https://www.rubydoc.info/gems/rails-html-sanitizer/1.4.3
108
- source_code_uri: https://github.com/rails/rails-html-sanitizer/tree/v1.4.3
67
+ changelog_uri: https://github.com/rails/rails-html-sanitizer/blob/v1.6.0/CHANGELOG.md
68
+ documentation_uri: https://www.rubydoc.info/gems/rails-html-sanitizer/1.6.0
69
+ source_code_uri: https://github.com/rails/rails-html-sanitizer/tree/v1.6.0
109
70
  post_install_message:
110
71
  rdoc_options: []
111
72
  require_paths:
@@ -114,17 +75,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
75
  requirements:
115
76
  - - ">="
116
77
  - !ruby/object:Gem::Version
117
- version: '0'
78
+ version: 2.7.0
118
79
  required_rubygems_version: !ruby/object:Gem::Requirement
119
80
  requirements:
120
81
  - - ">="
121
82
  - !ruby/object:Gem::Version
122
83
  version: '0'
123
84
  requirements: []
124
- rubygems_version: 3.3.5
85
+ rubygems_version: 3.4.10
125
86
  signing_key:
126
87
  specification_version: 4
127
88
  summary: This gem is responsible to sanitize HTML fragments in Rails applications.
128
89
  test_files:
90
+ - test/rails_api_test.rb
129
91
  - test/sanitizer_test.rb
130
92
  - test/scrubbers_test.rb