Commit b59e47352e878ff0455cfe5bf4e1fcb40bcc165f
Committed by
Antonio Terceiro
1 parent
3133d012
Exists in
master
and in
28 other branches
Stripping HTML tags from article's tag names
(ActionItem1476)
Showing
4 changed files
with
35 additions
and
2 deletions
Show diff stats
app/models/article.rb
@@ -348,7 +348,11 @@ class Article < ActiveRecord::Base | @@ -348,7 +348,11 @@ class Article < ActiveRecord::Base | ||
348 | 348 | ||
349 | def sanitize_tag_list | 349 | def sanitize_tag_list |
350 | sanitizer = HTML::FullSanitizer.new | 350 | sanitizer = HTML::FullSanitizer.new |
351 | - self.tag_list.names.map!{|i| sanitizer.sanitize(i) } | 351 | + self.tag_list.names.map!{|i| strip_tag_name sanitizer.sanitize(i) } |
352 | + end | ||
353 | + | ||
354 | + def strip_tag_name(tag_name) | ||
355 | + tag_name.gsub(/[<>]/, '') | ||
352 | end | 356 | end |
353 | 357 | ||
354 | end | 358 | end |
@@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
1 | +class StripHtmlFromTagNames < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + Tag.all(:conditions => "name LIKE '%<%' OR name LIKE '%>%'").each do |tag| | ||
4 | + tag.name = tag.name.gsub(/[<>]/, '') | ||
5 | + tag.save | ||
6 | + end | ||
7 | + end | ||
8 | + | ||
9 | + def self.down | ||
10 | + say "WARNING: cannot undo this migration" | ||
11 | + end | ||
12 | +end |
db/schema.rb
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | # | 9 | # |
10 | # It's strongly recommended to check this file into your version control system. | 10 | # It's strongly recommended to check this file into your version control system. |
11 | 11 | ||
12 | -ActiveRecord::Schema.define(:version => 20100326171758) do | 12 | +ActiveRecord::Schema.define(:version => 20100413231206) do |
13 | 13 | ||
14 | create_table "article_versions", :force => true do |t| | 14 | create_table "article_versions", :force => true do |t| |
15 | t.integer "article_id" | 15 | t.integer "article_id" |
test/unit/article_test.rb
@@ -842,4 +842,21 @@ class ArticleTest < Test::Unit::TestCase | @@ -842,4 +842,21 @@ class ArticleTest < Test::Unit::TestCase | ||
842 | 842 | ||
843 | assert_equal [ published ], profile.articles.published | 843 | assert_equal [ published ], profile.articles.published |
844 | end | 844 | end |
845 | + | ||
846 | + should 'sanitize tags after save article' do | ||
847 | + article = fast_create(Article, :slug => 'article-with-tags', :profile_id => profile.id) | ||
848 | + article.tags << Tag.new(:name => "TV Web w<script type='javascript'></script>") | ||
849 | + assert_match /[<>]/, article.tags.last.name | ||
850 | + article.save! | ||
851 | + assert_no_match /[<>]/, article.tags.last.name | ||
852 | + end | ||
853 | + | ||
854 | + should 'strip HTML from tag names after save article' do | ||
855 | + article = fast_create(Article, :slug => 'article-with-tags', :profile_id => profile.id) | ||
856 | + article.tags << Tag.new(:name => "TV Web w<script type=...") | ||
857 | + assert_match /</, article.tags.last.name | ||
858 | + article.save! | ||
859 | + assert_no_match /</, article.tags.last.name | ||
860 | + end | ||
861 | + | ||
845 | end | 862 | end |