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
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-28 18:38:36 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-28 18:38:36 +0300
commit110592dfad951d3a3ad8d1ea6a12e8a2dbc3815a (patch)
treeae0224a63d1fc55541625e769942b78395b5daaf /spec
parent3e5f4a8802d60908fe3bcf56a72afd15e1a4777a (diff)
Add latest changes from gitlab-org/security/gitlab@12-7-stable-ee
Diffstat (limited to 'spec')
-rw-r--r--spec/lib/gitlab/asciidoc/include_processor_spec.rb44
-rw-r--r--spec/lib/gitlab/asciidoc_spec.rb18
2 files changed, 62 insertions, 0 deletions
diff --git a/spec/lib/gitlab/asciidoc/include_processor_spec.rb b/spec/lib/gitlab/asciidoc/include_processor_spec.rb
new file mode 100644
index 00000000000..5fec4d9e208
--- /dev/null
+++ b/spec/lib/gitlab/asciidoc/include_processor_spec.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require 'nokogiri'
+
+describe Gitlab::Asciidoc::IncludeProcessor do
+ let_it_be(:project) { create(:project, :repository) }
+
+ let(:processor_context) do
+ {
+ project: project,
+ max_includes: max_includes,
+ ref: ref
+ }
+ end
+ let(:ref) { project.repository.root_ref }
+ let(:max_includes) { 10 }
+
+ let(:reader) { Asciidoctor::PreprocessorReader.new(document, lines, 'file.adoc') }
+ let(:document) { Asciidoctor::Document.new(lines) }
+
+ subject(:processor) { described_class.new(processor_context) }
+
+ let(:a_blob) { double(:Blob, readable_text?: true, data: a_data) }
+ let(:a_data) { StringIO.new('include::b.adoc[]') }
+
+ let(:lines) { [':max-include-depth: 1000'] + Array.new(10, 'include::a.adoc[]') }
+
+ before do
+ allow(project.repository).to receive(:blob_at).with(ref, 'a.adoc').and_return(a_blob)
+ end
+
+ describe '#include_allowed?' do
+ it 'allows the first include' do
+ expect(processor.send(:include_allowed?, 'foo.adoc', reader)).to be_truthy
+ end
+
+ it 'disallows the Nth + 1 include' do
+ max_includes.times { processor.send(:read_blob, ref, 'a.adoc') }
+
+ expect(processor.send(:include_allowed?, 'foo.adoc', reader)).to be_falsey
+ end
+ end
+end
diff --git a/spec/lib/gitlab/asciidoc_spec.rb b/spec/lib/gitlab/asciidoc_spec.rb
index c8d159d1e84..c7156a500d0 100644
--- a/spec/lib/gitlab/asciidoc_spec.rb
+++ b/spec/lib/gitlab/asciidoc_spec.rb
@@ -425,6 +425,24 @@ module Gitlab
create_file(current_file, "= AsciiDoc\n")
end
+ def many_includes(target)
+ Array.new(10, "include::#{target}[]").join("\n")
+ end
+
+ context 'cyclic imports' do
+ before do
+ create_file('doc/api/a.adoc', many_includes('b.adoc'))
+ create_file('doc/api/b.adoc', many_includes('a.adoc'))
+ end
+
+ let(:include_path) { 'a.adoc' }
+ let(:requested_path) { 'doc/api/README.md' }
+
+ it 'completes successfully' do
+ is_expected.to include('<p>Include this:</p>')
+ end
+ end
+
context 'with path to non-existing file' do
let(:include_path) { 'not-exists.adoc' }