diff --git a/app/helpers/html_helper.rb b/app/helpers/html_helper.rb
index 7b65d34cf..f399274f4 100644
--- a/app/helpers/html_helper.rb
+++ b/app/helpers/html_helper.rb
@@ -1,6 +1,7 @@
module HtmlHelper
def format_html(html)
- Loofah::HTML5::DocumentFragment.parse(html).scrub!(AutoLinkScrubber.new).to_html.html_safe
+ @auto_link_scrubber ||= AutoLinkScrubber.new
+ Loofah::HTML5::DocumentFragment.parse(html).scrub!(@auto_link_scrubber).to_html.html_safe
end
def card_html_title(card)
diff --git a/lib/auto_link_scrubber.rb b/lib/auto_link_scrubber.rb
index 557a168c2..961c2c879 100644
--- a/lib/auto_link_scrubber.rb
+++ b/lib/auto_link_scrubber.rb
@@ -20,12 +20,13 @@ class AutoLinkScrubber < Loofah::Scrubber
def initialize
@direction = :top_down
+ @regexp_timeout_reported = false
end
def scrub(node)
return Loofah::Scrubber::STOP if EXCLUDED_ELEMENTS.include?(node.name)
- if node.text?
+ if node.text? && !@regexp_timeout_reported
replacement = autolink_text_node(node)
node.replace(replacement) if replacement
end
@@ -73,6 +74,7 @@ class AutoLinkScrubber < Loofah::Scrubber
links
rescue Regexp::TimeoutError => error
Sentry.capture_exception error if Fizzy.saas?
+ @regexp_timeout_reported = true
[]
end