From 826f0bd42f7406571923a4889ad895dadae59d4f Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 29 Sep 2007 20:19:33 +0000 Subject: Fixed that strip_tags blows up with invalid html (closes #9730) [lifo] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7677 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_view/helpers/text_helper.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'actionpack/lib') diff --git a/actionpack/lib/action_view/helpers/text_helper.rb b/actionpack/lib/action_view/helpers/text_helper.rb index bb7ddefcad..e3e17eaf42 100644 --- a/actionpack/lib/action_view/helpers/text_helper.rb +++ b/actionpack/lib/action_view/helpers/text_helper.rb @@ -329,15 +329,15 @@ module ActionView # strip_links('Blog: Visit.') # # => Blog: Visit def strip_links(html) - if !html.blank? && html.index("") tokenizer = HTML::Tokenizer.new(html) result = returning [] do |result| while token = tokenizer.next node = HTML::Node.parse(nil, 0, 0, token, false) result << node.to_s unless node.is_a?(HTML::Tag) && ["a", "href"].include?(node.name) end - end - strip_links(result.join) # Recurse - handle all dirty nested links + end.join + result == html ? result : strip_links(result) # Recurse - handle all dirty nested links else html end @@ -468,8 +468,10 @@ module ActionView # strip any comments, and if they have a newline at the end (ie. line with # only a comment) strip that too + result = text.join.gsub(/[\n]?/m, "") + # Recurse - handle all dirty nested tags - strip_tags(text.join.gsub(/[\n]?/m, "")) + result == html ? result : strip_tags(result) end # Creates a Cycle object whose _to_s_ method cycles through elements of an -- cgit v1.2.3