diff --git a/lib/auto_link_scrubber.rb b/lib/auto_link_scrubber.rb index 961c2c879..e36039be9 100644 --- a/lib/auto_link_scrubber.rb +++ b/lib/auto_link_scrubber.rb @@ -18,6 +18,8 @@ class AutoLinkScrubber < Loofah::Scrubber TRAILING_PUNCTUATION = %(.?,:!;"'<>) TRAILING_PUNCTUATION_REGEXP = /[#{Regexp.escape(TRAILING_PUNCTUATION)}]+\z/ + MAX_TEXT_NODE_LENGTH = 10_000 + def initialize @direction = :top_down @regexp_timeout_reported = false @@ -56,6 +58,8 @@ class AutoLinkScrubber < Loofah::Scrubber end def find_links(text) + return [] if text.length > MAX_TEXT_NODE_LENGTH + links = [] text.scan(AUTOLINK_REGEXP) do diff --git a/test/helpers/html_helper_test.rb b/test/helpers/html_helper_test.rb index f19d80003..b8a498774 100644 --- a/test/helpers/html_helper_test.rb +++ b/test/helpers/html_helper_test.rb @@ -125,6 +125,17 @@ class HtmlHelperTest < ActionView::TestCase end end + test "skip auto-linking in very large text nodes" do + url = "https://example.com" + large_text = "x" * 5_000 + " #{url} " + "y" * 5_000 + input = "
#{large_text}
" + + result = format_html(input) + + assert_no_match(/