summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-03-31 00:01:22 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-03-31 00:01:46 +0000
commit7e3ab46a0769ed3f61d02c8662395e8f2e99703f (patch)
treeedb42e0cd9f9e1eddd867f1de3948ce1ca1d35e4
parent083a9c669b2841b42f80476e5271fadcf6c3a635 (diff)
downloadgitlab-ce-7e3ab46a0769ed3f61d02c8662395e8f2e99703f.tar.gz
Add latest changes from gitlab-org/security/gitlab@14-8-stable-ee
-rw-r--r--config/initializers/rdoc_segfault_patch.rb21
-rw-r--r--spec/initializers/rdoc_segfault_patch_spec.rb24
2 files changed, 45 insertions, 0 deletions
diff --git a/config/initializers/rdoc_segfault_patch.rb b/config/initializers/rdoc_segfault_patch.rb
new file mode 100644
index 00000000000..2494d7ef421
--- /dev/null
+++ b/config/initializers/rdoc_segfault_patch.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+# Monkey patch of RDoc to prevent Ruby segfault due to
+# stack buffer overflow Ruby bug -
+# https://bugs.ruby-lang.org/issues/16376
+#
+# Safe to remove once GitLab upgrades to Ruby 3.0
+# or once the fix is backported to 2.7.x and
+# GitLab upgrades.
+# https://gitlab.com/gitlab-org/gitlab/-/issues/351179
+class RDoc::Markup::ToHtml
+ def parseable?(_)
+ false
+ end
+end
+
+class RDoc::Markup::Verbatim
+ def ruby?
+ false
+ end
+end
diff --git a/spec/initializers/rdoc_segfault_patch_spec.rb b/spec/initializers/rdoc_segfault_patch_spec.rb
new file mode 100644
index 00000000000..f9630295052
--- /dev/null
+++ b/spec/initializers/rdoc_segfault_patch_spec.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+RSpec.describe 'RDoc segfault patch fix' do
+ describe 'RDoc::Markup::ToHtml' do
+ describe '#parseable?' do
+ it 'returns false' do
+ to_html = RDoc::Markup::ToHtml.new( nil)
+
+ expect(to_html.parseable?('"def foo; end"')).to eq(false)
+ end
+ end
+ end
+
+ describe 'RDoc::Markup::Verbatim' do
+ describe 'ruby?' do
+ it 'returns false' do
+ verbatim = RDoc::Markup::Verbatim.new('def foo; end')
+ verbatim.format = :ruby
+
+ expect(verbatim.ruby?).to eq(false)
+ end
+ end
+ end
+end