diff --git a/CHANGELOG.md b/CHANGELOG.md index 685f94cdf6..2480a1c5d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +1.1.2 (2019-02-27) +================== +This release fixes a bug found in the fix introduced in 1.1.1. + +Bug fixes: + +* [BUG edf45e6f](https://github.com/rust-lang/regex/commit/edf45e6f): + Fix bug introduced in reverse suffix literal matcher in the 1.1.1 release. + + 1.1.1 (2019-02-27) ================== This is a small release with one fix for a bug caused by literal optimizations. diff --git a/Cargo.toml b/Cargo.toml index f4b3cf3389..777d8d298c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "regex" -version = "1.1.1" #:version +version = "1.1.2" #:version authors = ["The Rust Project Developers"] license = "MIT/Apache-2.0" readme = "README.md" diff --git a/src/exec.rs b/src/exec.rs index dc5c26860f..dd30c81ec5 100644 --- a/src/exec.rs +++ b/src/exec.rs @@ -745,13 +745,13 @@ impl<'c> ExecNoSync<'c> { debug_assert!(lcs.len() >= 1); let mut start = original_start; let mut end = start; - let mut last_literal_match = 0; + let mut last_literal = start; while end <= text.len() { - last_literal_match += match lcs.find(&text[last_literal_match..]) { + last_literal += match lcs.find(&text[last_literal..]) { None => return Some(NoMatch(text.len())), Some(i) => i, }; - end = last_literal_match + lcs.len(); + end = last_literal + lcs.len(); match dfa::Fsm::reverse( &self.ro.dfa_reverse, self.cache, @@ -760,10 +760,10 @@ impl<'c> ExecNoSync<'c> { end - start, ) { Match(0) | NoMatch(0) => return None, - Match(s) => return Some(Match((s + start, end))), + Match(i) => return Some(Match((start + i, end))), NoMatch(i) => { - start = i; - last_literal_match += 1; + start += i; + last_literal += 1; continue; } Quit => return Some(Quit), diff --git a/tests/regression.rs b/tests/regression.rs index 8dcc189942..724e01bfa0 100644 --- a/tests/regression.rs +++ b/tests/regression.rs @@ -83,7 +83,9 @@ ismatch!(strange_anchor_non_complete_prefix, r"a^{2}", "", false); ismatch!(strange_anchor_non_complete_suffix, r"${2}a", "", false); // See: https://github.com/BurntSushi/ripgrep/issues/1203 -ismatch!(wat1, r"[0-4][0-4][0-4]000", "153.230000", true); +ismatch!(reverse_suffix1, r"[0-4][0-4][0-4]000", "153.230000", true); +ismatch!(reverse_suffix2, r"\d\d\d000", "153.230000\n", true); +matiter!(reverse_suffix3, r"\d\d\d000", "153.230000\n", (4, 10)); // See: https://github.com/rust-lang/regex/issues/334 mat!(captures_after_dfa_premature_end, r"a(b*(X|$))?", "abcbX",