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/gitlab/other_markup.rb')
-rw-r--r--lib/gitlab/other_markup.rb22
1 files changed, 19 insertions, 3 deletions
diff --git a/lib/gitlab/other_markup.rb b/lib/gitlab/other_markup.rb
index 0dd6b8a809c..2368ea3ad28 100644
--- a/lib/gitlab/other_markup.rb
+++ b/lib/gitlab/other_markup.rb
@@ -3,18 +3,34 @@
module Gitlab
# Parser/renderer for markups without other special support code.
module OtherMarkup
+ RENDER_TIMEOUT = 10.seconds
+
# Public: Converts the provided markup into HTML.
#
# input - the source text in a markup format
#
def self.render(file_name, input, context)
- html = GitHub::Markup.render(file_name, input)
- .force_encoding(input.encoding)
+ html = render_markup(file_name, input, context).force_encoding(input.encoding)
+
context[:pipeline] ||= :markup
html = Banzai.render(html, context)
-
html.html_safe
end
+
+ def self.render_markup(file_name, input, context)
+ Gitlab::RenderTimeout.timeout(foreground: RENDER_TIMEOUT) { GitHub::Markup.render(file_name, input) }
+ rescue Timeout::Error => e
+ class_name = name.demodulize
+ timeout_counter.increment(source: class_name)
+ Gitlab::ErrorTracking.track_exception(e, project_id: context[:project]&.id, class_name: class_name,
+ file_name: file_name)
+
+ ActionController::Base.helpers.simple_format(input)
+ end
+
+ def self.timeout_counter
+ Gitlab::Metrics.counter(:banzai_filter_timeouts_total, 'Count of the Banzai filters that time out')
+ end
end
end