re2 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -2
- data/ext/re2/re2.cc +16 -1
- data/spec/re2/regexp_spec.rb +44 -2
- data/spec/re2/scanner_spec.rb +6 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce0e303b87738a767776165216cbbd8cf0f63ec9dba3ef4389f657cbb5da8dc3
|
4
|
+
data.tar.gz: 61983a9e93dc64334d43a41f3f978ff71de020bd9d6f27bc409431a313ea58e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 229f667e12094ae2d42ae3d72a08aa0567cf17e1d666d9677b6b0bdfccc549f241870085ac918789fbbcd0fcb538a942a31f6922f32d88cc7b54043b553f35e3
|
7
|
+
data.tar.gz: 850d6dc79bcfbfe96a913ac93ddc2c8d4e1b79ddd8aa50eb951bfaae99e3a1688ff31fd2e55c2e497946b9ea4913bcca4938070b6fa37f2ca77d88721652ca66
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@ re2 [, libre2.1 (2020-03-02), libre2.6 (2020-03-03), libre2.7 (2020-05-01), libre2.8 (2020-07-06), libre2.9 (2020-11-01)
|
10
10
|
|
@@ -175,7 +175,9 @@ Contributions
|
|
175
175
|
* Thanks to [Stefano Rivera](https://github.com/stefanor) who first contributed C++11 support;
|
176
176
|
* Thanks to [Stan Hu](https://github.com/stanhu) for reporting a bug with empty patterns and `RE2::Regexp#scan`;
|
177
177
|
* Thanks to [Sebastian Reitenbach](https://github.com/buzzdeee) for reporting
|
178
|
-
the deprecation and removal of the `utf8` encoding option in re2
|
178
|
+
the deprecation and removal of the `utf8` encoding option in re2;
|
179
|
+
* Thanks to [Sergio Medina](https://github.com/serch) for reporting a bug when
|
180
|
+
using `RE2::Scanner#scan` with an invalid regular expression.
|
179
181
|
|
180
182
|
Contact
|
181
183
|
-------
|
data/ext/re2/re2.cc
CHANGED
@@ -1158,6 +1158,7 @@ static VALUE re2_regexp_named_capturing_groups(VALUE self) {
|
|
1158
1158
|
* @param [String] text the text to search
|
1159
1159
|
* @param [Fixnum] number_of_matches the number of matches to return
|
1160
1160
|
* @return [RE2::MatchData] the matches
|
1161
|
+
* @raise [ArgumentError] if given a negative number of matches
|
1161
1162
|
* @raise [NoMemoryError] if there was not enough memory to allocate the matches
|
1162
1163
|
* @example
|
1163
1164
|
* r = RE2::Regexp.new('w(o)(o)')
|
@@ -1180,7 +1181,15 @@ static VALUE re2_regexp_match(int argc, VALUE *argv, VALUE self) {
|
|
1180
1181
|
|
1181
1182
|
if (RTEST(number_of_matches)) {
|
1182
1183
|
n = NUM2INT(number_of_matches);
|
1184
|
+
|
1185
|
+
if (n < 0) {
|
1186
|
+
rb_raise(rb_eArgError, "number of matches should be >= 0");
|
1187
|
+
}
|
1183
1188
|
} else {
|
1189
|
+
if (!p->pattern->ok()) {
|
1190
|
+
return Qnil;
|
1191
|
+
}
|
1192
|
+
|
1184
1193
|
n = p->pattern->NumberOfCapturingGroups();
|
1185
1194
|
}
|
1186
1195
|
|
@@ -1251,7 +1260,13 @@ static VALUE re2_regexp_scan(VALUE self, VALUE text) {
|
|
1251
1260
|
c->input = new(nothrow) re2::StringPiece(StringValuePtr(text));
|
1252
1261
|
c->regexp = self;
|
1253
1262
|
c->text = text;
|
1254
|
-
|
1263
|
+
|
1264
|
+
if (p->pattern->ok()) {
|
1265
|
+
c->number_of_capturing_groups = p->pattern->NumberOfCapturingGroups();
|
1266
|
+
} else {
|
1267
|
+
c->number_of_capturing_groups = 0;
|
1268
|
+
}
|
1269
|
+
|
1255
1270
|
c->eof = false;
|
1256
1271
|
|
1257
1272
|
return scanner;
|
data/spec/re2/regexp_spec.rb
CHANGED
@@ -13,6 +13,11 @@ RSpec.describe RE2::Regexp do
|
|
13
13
|
it "raises an error if given an inappropriate type" do
|
14
14
|
expect { RE2::Regexp.new(nil) }.to raise_error(TypeError)
|
15
15
|
end
|
16
|
+
|
17
|
+
it "allows invalid patterns to be created" do
|
18
|
+
re = RE2::Regexp.new('???', :log_errors => false)
|
19
|
+
expect(re).to be_a(RE2::Regexp)
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
23
|
describe "#compile" do
|
@@ -25,6 +30,11 @@ RSpec.describe RE2::Regexp do
|
|
25
30
|
re = RE2::Regexp.compile('woo', :case_sensitive => false)
|
26
31
|
expect(re).to be_a(RE2::Regexp)
|
27
32
|
end
|
33
|
+
|
34
|
+
it "allows invalid patterns to be created" do
|
35
|
+
re = RE2::Regexp.compile('???', :log_errors => false)
|
36
|
+
expect(re).to be_a(RE2::Regexp)
|
37
|
+
end
|
28
38
|
end
|
29
39
|
|
30
40
|
describe "#options" do
|
@@ -83,6 +93,11 @@ RSpec.describe RE2::Regexp do
|
|
83
93
|
program_size = RE2::Regexp.new('w(o)(o)').program_size
|
84
94
|
expect(program_size).to be_a(Fixnum)
|
85
95
|
end
|
96
|
+
|
97
|
+
it "returns -1 for an invalid pattern" do
|
98
|
+
program_size = RE2::Regexp.new('???', :log_errors => false).program_size
|
99
|
+
expect(program_size).to eq(-1)
|
100
|
+
end
|
86
101
|
end
|
87
102
|
|
88
103
|
describe "#to_str" do
|
@@ -97,6 +112,11 @@ RSpec.describe RE2::Regexp do
|
|
97
112
|
pattern = RE2::Regexp.new('w(o)(o)').pattern
|
98
113
|
expect(pattern).to eq("w(o)(o)")
|
99
114
|
end
|
115
|
+
|
116
|
+
it "returns the pattern even if invalid" do
|
117
|
+
pattern = RE2::Regexp.new('???', :log_errors => false).pattern
|
118
|
+
expect(pattern).to eq("???")
|
119
|
+
end
|
100
120
|
end
|
101
121
|
|
102
122
|
describe "#inspect" do
|
@@ -274,6 +294,15 @@ RSpec.describe RE2::Regexp do
|
|
274
294
|
expect { re.match("My name is Robert Paulson", {}) }.to raise_error(TypeError)
|
275
295
|
end
|
276
296
|
|
297
|
+
it "raises an exception when given a negative number of matches" do
|
298
|
+
expect { re.match("My name is Robert Paulson", -1) }.to raise_error(ArgumentError, "number of matches should be >= 0")
|
299
|
+
end
|
300
|
+
|
301
|
+
it "returns nil with an invalid pattern" do
|
302
|
+
re = RE2::Regexp.new('???', :log_errors => false)
|
303
|
+
expect(re.match('My name is Robert Paulson')).to be_nil
|
304
|
+
end
|
305
|
+
|
277
306
|
describe "with a specific number of matches under the total in the pattern" do
|
278
307
|
subject { re.match("My name is Robert Paulson", 1) }
|
279
308
|
|
@@ -325,6 +354,11 @@ RSpec.describe RE2::Regexp do
|
|
325
354
|
expect(re.match?("My name is Robert Paulson")).to eq(true)
|
326
355
|
expect(re.match?("My age is 99")).to eq(false)
|
327
356
|
end
|
357
|
+
|
358
|
+
it "returns false if the pattern is invalid" do
|
359
|
+
re = RE2::Regexp.new('???', :log_errors => false)
|
360
|
+
expect(re.match?("My name is Robert Paulson")).to eq(false)
|
361
|
+
end
|
328
362
|
end
|
329
363
|
|
330
364
|
describe "#=~" do
|
@@ -365,13 +399,13 @@ RSpec.describe RE2::Regexp do
|
|
365
399
|
end
|
366
400
|
end
|
367
401
|
|
368
|
-
describe "
|
402
|
+
describe ".escape" do
|
369
403
|
it "transforms a string into a regexp" do
|
370
404
|
expect(RE2::Regexp.escape("1.5-2.0?")).to eq('1\.5\-2\.0\?')
|
371
405
|
end
|
372
406
|
end
|
373
407
|
|
374
|
-
describe "
|
408
|
+
describe ".quote" do
|
375
409
|
it "transforms a string into a regexp" do
|
376
410
|
expect(RE2::Regexp.quote("1.5-2.0?")).to eq('1\.5\-2\.0\?')
|
377
411
|
end
|
@@ -383,6 +417,10 @@ RSpec.describe RE2::Regexp do
|
|
383
417
|
expect(RE2::Regexp.new('abc').number_of_capturing_groups).to eq(0)
|
384
418
|
expect(RE2::Regexp.new('a((b)c)').number_of_capturing_groups).to eq(2)
|
385
419
|
end
|
420
|
+
|
421
|
+
it "returns -1 for an invalid regexp" do
|
422
|
+
expect(RE2::Regexp.new('???', :log_errors => false).number_of_capturing_groups).to eq(-1)
|
423
|
+
end
|
386
424
|
end
|
387
425
|
|
388
426
|
describe "#named_capturing_groups" do
|
@@ -400,6 +438,10 @@ RSpec.describe RE2::Regexp do
|
|
400
438
|
expect(groups["bob"]).to eq(1)
|
401
439
|
expect(groups["rob"]).to eq(3)
|
402
440
|
end
|
441
|
+
|
442
|
+
it "returns an empty hash for an invalid regexp" do
|
443
|
+
expect(RE2::Regexp.new('???', :log_errors => false).named_capturing_groups).to be_empty
|
444
|
+
end
|
403
445
|
end
|
404
446
|
|
405
447
|
describe "#scan" do
|
data/spec/re2/scanner_spec.rb
CHANGED
@@ -45,6 +45,12 @@ RSpec.describe RE2::Scanner do
|
|
45
45
|
expect(scanner.scan).to be_nil
|
46
46
|
end
|
47
47
|
|
48
|
+
it "returns nil if the regexp is invalid" do
|
49
|
+
r = RE2::Regexp.new('???', :log_errors => false)
|
50
|
+
scanner = r.scan("Foo bar")
|
51
|
+
expect(scanner.scan).to be_nil
|
52
|
+
end
|
53
|
+
|
48
54
|
it "returns an empty array if the input is empty" do
|
49
55
|
r = RE2::Regexp.new("")
|
50
56
|
scanner = r.scan("")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: re2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Mucur
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -79,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
79
|
- !ruby/object:Gem::Version
|
80
80
|
version: '0'
|
81
81
|
requirements: []
|
82
|
-
rubygems_version: 3.
|
82
|
+
rubygems_version: 3.2.3
|
83
83
|
signing_key:
|
84
84
|
specification_version: 4
|
85
85
|
summary: Ruby bindings to re2.
|