diff --git a/src/exec.rs b/src/exec.rs index e75ca083a..b9abcdc04 100644 --- a/src/exec.rs +++ b/src/exec.rs @@ -459,7 +459,7 @@ impl<'c> RegularExpression for ExecNoSync<'c> { self.cache.value(), true, &text[start..], - text.len(), + text.len() - start, ) { dfa::Result::Match(_) => Some(text.len()), dfa::Result::NoMatch(_) => None, @@ -511,7 +511,7 @@ impl<'c> RegularExpression for ExecNoSync<'c> { self.cache.value(), true, &text[start..], - text.len(), + text.len() - start, ) { dfa::Result::Match(_) => true, dfa::Result::NoMatch(_) => false, diff --git a/tests/test_default.rs b/tests/test_default.rs index be627f7a6..19a319af1 100644 --- a/tests/test_default.rs +++ b/tests/test_default.rs @@ -220,3 +220,13 @@ fn empty_alt_regex_fails() { let result = Regex::new(r"(?:|){4294967295}"); assert!(result.is_err()); } + +// Regression test for: https://github.com/rust-lang/regex/issues/969 +#[test] +fn regression_i969() { + use regex::Regex; + + let re = Regex::new(r"c.*d\z").unwrap(); + assert_eq!(Some(6), re.shortest_match_at("ababcd", 4)); + assert_eq!(Some(6), re.find_at("ababcd", 4).map(|m| m.end())); +}