Upgrade the re2 gem to 1.1.0
This commit is contained in:
parent
883488e0b2
commit
61f948baed
2
Gemfile
2
Gemfile
|
|
@ -164,7 +164,7 @@ gem 'rainbow', '~> 2.2'
|
|||
gem 'settingslogic', '~> 2.0.9'
|
||||
|
||||
# Linear-time regex library for untrusted regular expressions
|
||||
gem 're2', '~> 1.0.0'
|
||||
gem 're2', '~> 1.1.0'
|
||||
|
||||
# Misc
|
||||
|
||||
|
|
|
|||
|
|
@ -656,7 +656,7 @@ GEM
|
|||
debugger-ruby_core_source (~> 1.3)
|
||||
rdoc (4.2.2)
|
||||
json (~> 1.4)
|
||||
re2 (1.0.0)
|
||||
re2 (1.1.0)
|
||||
recaptcha (3.0.0)
|
||||
json
|
||||
recursive-open-struct (1.0.0)
|
||||
|
|
@ -1055,7 +1055,7 @@ DEPENDENCIES
|
|||
raindrops (~> 0.18)
|
||||
rblineprof (~> 0.3.6)
|
||||
rdoc (~> 4.2)
|
||||
re2 (~> 1.0.0)
|
||||
re2 (~> 1.1.0)
|
||||
recaptcha (~> 3.0)
|
||||
redcarpet (~> 3.4)
|
||||
redis (~> 3.2)
|
||||
|
|
|
|||
|
|
@ -22,33 +22,9 @@ module Gitlab
|
|||
end
|
||||
|
||||
def scan(text)
|
||||
text = text.dup # modified in-place
|
||||
results = []
|
||||
|
||||
loop do
|
||||
match = scan_regexp.match(text)
|
||||
break unless match
|
||||
|
||||
# Ruby scan returns empty strings, not nil
|
||||
groups = match.to_a.map(&:to_s)
|
||||
|
||||
results <<
|
||||
if regexp.number_of_capturing_groups.zero?
|
||||
groups[0]
|
||||
else
|
||||
groups[1..-1]
|
||||
end
|
||||
|
||||
matchsize = match.end(0)
|
||||
|
||||
# No further matches
|
||||
break unless matchsize.present?
|
||||
|
||||
text.slice!(0, matchsize)
|
||||
break unless text.present?
|
||||
end
|
||||
|
||||
results
|
||||
matches = scan_regexp.scan(text).to_a
|
||||
matches.map!(&:first) if regexp.number_of_capturing_groups.zero?
|
||||
matches
|
||||
end
|
||||
|
||||
def replace(text, rewrite)
|
||||
|
|
|
|||
|
|
@ -308,6 +308,20 @@ describe Gitlab::Ci::Trace::Stream do
|
|||
it { is_expected.to eq('65') }
|
||||
end
|
||||
|
||||
context 'long line' do
|
||||
let(:data) { 'a' * 80000 + '100%' + 'a' * 80000 }
|
||||
let(:regex) { '\d+\%' }
|
||||
|
||||
it { is_expected.to eq('100') }
|
||||
end
|
||||
|
||||
context 'many lines' do
|
||||
let(:data) { "foo\n" * 80000 + "100%\n" + "foo\n" * 80000 }
|
||||
let(:regex) { '\d+\%' }
|
||||
|
||||
it { is_expected.to eq('100') }
|
||||
end
|
||||
|
||||
context 'empty regex' do
|
||||
let(:data) { 'foo' }
|
||||
let(:regex) { '' }
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ describe Gitlab::UntrustedRegexp do
|
|||
let(:regexp) { '' }
|
||||
let(:text) { 'foo' }
|
||||
|
||||
it 'returns an array of empty matches' do
|
||||
is_expected.to eq([''])
|
||||
it 'returns an array of nil matches' do
|
||||
is_expected.to eq([nil, nil, nil, nil])
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -63,8 +63,8 @@ describe Gitlab::UntrustedRegexp do
|
|||
let(:regexp) { '()' }
|
||||
let(:text) { 'foo' }
|
||||
|
||||
it 'returns an array of empty matches in an array' do
|
||||
is_expected.to eq([['']])
|
||||
it 'returns an array of nil matches in an array' do
|
||||
is_expected.to eq([[nil], [nil], [nil], [nil]])
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue