summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2015-05-08 12:17:54 -0400
committerRobert Speicher <rspeicher@gmail.com>2015-05-08 12:31:34 -0400
commit70bbf093aa07d416ea33da24ab015e5d22c0d501 (patch)
tree4ad8957bbc3bd5ad170fc41c194010ea527ea15c /lib
parentd9b6b9201e7d4495c28035bf545ee2b85834bd5e (diff)
downloadgitlab-ce-70bbf093aa07d416ea33da24ab015e5d22c0d501.tar.gz
Remove class and id attributes from SanitizationFilter whitelistrs-disallow-id-class
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/markdown/sanitization_filter.rb19
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/gitlab/markdown/sanitization_filter.rb b/lib/gitlab/markdown/sanitization_filter.rb
index 9a154e0b2fe..6f33155badf 100644
--- a/lib/gitlab/markdown/sanitization_filter.rb
+++ b/lib/gitlab/markdown/sanitization_filter.rb
@@ -10,8 +10,9 @@ module Gitlab
def whitelist
whitelist = HTML::Pipeline::SanitizationFilter::WHITELIST
- # Allow `class` and `id` on all elements
- whitelist[:attributes][:all].push('class', 'id')
+ # Allow code highlighting
+ whitelist[:attributes]['pre'] = %w(class)
+ whitelist[:attributes]['span'] = %w(class)
# Allow table alignment
whitelist[:attributes]['th'] = %w(style)
@@ -23,6 +24,9 @@ module Gitlab
# Remove `rel` attribute from `a` elements
whitelist[:transformers].push(remove_rel)
+ # Remove `class` attribute from non-highlight spans
+ whitelist[:transformers].push(clean_spans)
+
whitelist
end
@@ -33,6 +37,17 @@ module Gitlab
end
end
end
+
+ def clean_spans
+ lambda do |env|
+ return unless env[:node_name] == 'span'
+ return unless env[:node].has_attribute?('class')
+
+ unless has_ancestor?(env[:node], 'pre')
+ env[:node].remove_attribute('class')
+ end
+ end
+ end
end
end
end