Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/banzai/filter/pathological_markdown_filter.rb')
-rw-r--r--lib/banzai/filter/pathological_markdown_filter.rb27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/banzai/filter/pathological_markdown_filter.rb b/lib/banzai/filter/pathological_markdown_filter.rb
new file mode 100644
index 00000000000..0f94150c7a1
--- /dev/null
+++ b/lib/banzai/filter/pathological_markdown_filter.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+module Banzai
+ module Filter
+ class PathologicalMarkdownFilter < HTML::Pipeline::TextFilter
+ # It's not necessary for this to be precise - we just need to detect
+ # when there are a non-trivial number of unclosed image links.
+ # So we don't really care about code blocks, etc.
+ # See https://gitlab.com/gitlab-org/gitlab/-/issues/370428
+ REGEX = /!\[(?:[^\]])+?!\[/.freeze
+ DETECTION_MAX = 10
+
+ def call
+ count = 0
+
+ @text.scan(REGEX) do |_match|
+ count += 1
+ break if count > DETECTION_MAX
+ end
+
+ return @text if count <= DETECTION_MAX
+
+ "_Unable to render markdown - too many unclosed markdown image links detected._"
+ end
+ end
+ end
+end