1
0
mirror of https://github.com/BurntSushi/ripgrep.git synced 2025-03-03 14:32:22 +02:00

regex: fix another inner literal bug

It looks like `is_simple` wasn't quite correct.

I can't wait until this code is rewritten. It is still not quite clearly
correct to me.

Fixes #1537
This commit is contained in:
Andrew Gallant 2020-04-01 20:34:39 -04:00
parent 3d6a58faff
commit 1c4b5adb7b
No known key found for this signature in database
GPG Key ID: B2E3A4923F8B0D44
3 changed files with 31 additions and 6 deletions

View File

@ -1,3 +1,11 @@
TBD
===
Bug fixes:
* [BUG #1537](https://github.com/BurntSushi/ripgrep/issues/1537):
Fix match bug caused by inner literal optimization.
12.0.1 (2020-03-29) 12.0.1 (2020-03-29)
=================== ===================
ripgrep 12.0.1 is a small patch release that includes a minor bug fix relating ripgrep 12.0.1 is a small patch release that includes a minor bug fix relating

View File

@ -326,12 +326,12 @@ fn is_simple(expr: &Hir) -> bool {
HirKind::Empty HirKind::Empty
| HirKind::Literal(_) | HirKind::Literal(_)
| HirKind::Class(_) | HirKind::Class(_)
| HirKind::Repetition(_)
| HirKind::Concat(_) | HirKind::Concat(_)
| HirKind::Alternation(_) => true, | HirKind::Alternation(_) => true,
HirKind::Anchor(_) | HirKind::WordBoundary(_) | HirKind::Group(_) => { HirKind::Anchor(_)
false | HirKind::WordBoundary(_)
} | HirKind::Group(_)
| HirKind::Repetition(_) => false,
} }
} }
@ -412,8 +412,17 @@ mod tests {
// https://github.com/BurntSushi/ripgrep/issues/1319 // https://github.com/BurntSushi/ripgrep/issues/1319
assert_eq!( assert_eq!(
one_regex(r"TTGAGTCCAGGAG[ATCG]{2}C"), one_regex(r"TTGAGTCCAGGAG[ATCG]{2}C"),
pat("TTGAGTCCAGGAGA|TTGAGTCCAGGAGC|\ pat("TTGAGTCCAGGAG"),
TTGAGTCCAGGAGG|TTGAGTCCAGGAGT")
); );
} }
#[test]
fn regression_1537() {
// Regression from:
// https://github.com/BurntSushi/ripgrep/issues/1537
assert_eq!(one_regex(r";(.*,)"), pat(";"));
assert_eq!(one_regex(r";((.*,))"), pat(";"));
assert_eq!(one_regex(r";(.*,)+"), pat(";"),);
assert_eq!(one_regex(r";(.*,){1}"), pat(";"),);
}
} }

View File

@ -791,3 +791,11 @@ rgtest!(
eqnice!("repotree/not-ignored\n", cmd.stdout()); eqnice!("repotree/not-ignored\n", cmd.stdout());
} }
); );
// See: https://github.com/BurntSushi/ripgrep/issues/1537
rgtest!(r1537, |dir: Dir, mut cmd: TestCommand| {
dir.create("foo", "abc;de,fg");
let expected = "foo:abc;de,fg\n";
eqnice!(expected, cmd.arg(";(.*,){1}").stdout());
});