Commit 4bda5b50 authored by Nick Thomas's avatar Nick Thomas

Short-circuit build coverage extraction for empty regexes

parent 754d8cae
...@@ -67,7 +67,7 @@ module Gitlab ...@@ -67,7 +67,7 @@ module Gitlab
def extract_coverage(regex) def extract_coverage(regex)
return unless valid? return unless valid?
return unless regex return unless regex.present?
regex = Gitlab::UntrustedRegexp.new(regex) regex = Gitlab::UntrustedRegexp.new(regex)
......
...@@ -39,7 +39,12 @@ module Gitlab ...@@ -39,7 +39,12 @@ module Gitlab
groups[1..-1] groups[1..-1]
end end
text.slice!(0, match.end(0) || 1) matchsize = match.end(0)
# No further matches
break unless matchsize.present?
text.slice!(0, matchsize)
break unless text.present? break unless text.present?
end end
......
...@@ -307,5 +307,27 @@ describe Gitlab::Ci::Trace::Stream do ...@@ -307,5 +307,27 @@ describe Gitlab::Ci::Trace::Stream do
it { is_expected.to eq('65') } it { is_expected.to eq('65') }
end end
context 'empty regex' do
let(:data) { 'foo' }
let(:regex) { '' }
it 'skips processing' do
expect(stream).not_to receive(:read)
is_expected.to be_nil
end
end
context 'nil regex' do
let(:data) { 'foo' }
let(:regex) { nil }
it 'skips processing' do
expect(stream).not_to receive(:read)
is_expected.to be_nil
end
end
end end
end end
...@@ -55,7 +55,7 @@ describe Gitlab::UntrustedRegexp do ...@@ -55,7 +55,7 @@ describe Gitlab::UntrustedRegexp do
let(:text) { 'foo' } let(:text) { 'foo' }
it 'returns an array of empty matches' do it 'returns an array of empty matches' do
is_expected.to eq(['', '', '']) is_expected.to eq([''])
end end
end end
...@@ -63,8 +63,8 @@ describe Gitlab::UntrustedRegexp do ...@@ -63,8 +63,8 @@ describe Gitlab::UntrustedRegexp do
let(:regexp) { '()' } let(:regexp) { '()' }
let(:text) { 'foo' } let(:text) { 'foo' }
it 'returns arrays of empty matches in an array' do it 'returns an array of empty matches in an array' do
is_expected.to eq([[''], [''], ['']]) is_expected.to eq([['']])
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment