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