diff --git a/regex-automata/src/meta/wrappers.rs b/regex-automata/src/meta/wrappers.rs index 8d6f738e4c..06874f96d8 100644 --- a/regex-automata/src/meta/wrappers.rs +++ b/regex-automata/src/meta/wrappers.rs @@ -177,7 +177,8 @@ impl BoundedBacktracker { } // If the backtracker is just going to return an error because the // haystack is too long, then obviously do not use it. - if input.get_span().len() > engine.max_haystack_len() { + let max_haystack_len = engine.max_haystack_len(); + if max_haystack_len == 0 || input.get_span().len() > max_haystack_len { return None; } Some(engine) diff --git a/regex-automata/tests/meta/suite.rs b/regex-automata/tests/meta/suite.rs index 2c3de64fb9..f732a7459d 100644 --- a/regex-automata/tests/meta/suite.rs +++ b/regex-automata/tests/meta/suite.rs @@ -39,6 +39,14 @@ fn default() -> Result<()> { Ok(()) } +#[test] +fn backtracker_zero_max_haystack_len() -> Result<()> { + let config = Regex::config().nfa_size_limit(Some(1_000_000_000)); + let re = Regex::builder().configure(config).build(r"^.{0,404600}$")?; + assert!(re.is_match("")); + Ok(()) +} + /// Tests the default configuration minus the full DFA. #[test] fn no_dfa() -> Result<()> {