Open
Description
What version of regex are you using?
Latest / 0.4.4
Describe the bug at a high level.
Calling .reset(..)
on a meta::Cache
can panic if called on a different regex than it was created with (which is the whole point of reset
).
What are the steps to reproduce the behavior?
use regex_automata::meta::Regex;
fn main() {
let re1 = Regex::new("").unwrap();
let re2 = Regex::new("\\b").unwrap();
re1.create_cache().reset(&re2);
}
What is the actual behavior?
thread 'main' panicked at /playground/.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.3/src/meta/wrappers.rs:507:29:
called `Option::unwrap()` on a `None` value
stack backtrace:
0: rust_begin_unwind
at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:645:5
1: core::panicking::panic_fmt
at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:72:14
2: core::panicking::panic
at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:127:5
3: core::option::Option<T>::unwrap
at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/option.rs:931:21
4: regex_automata::meta::wrappers::OnePassCache::reset
at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.3/src/meta/wrappers.rs:507:13
5: <regex_automata::meta::strategy::Core as regex_automata::meta::strategy::Strategy>::reset_cache
at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.3/src/meta/strategy.rs:688:9
6: regex_automata::meta::regex::Cache::reset
at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/regex-automata-0.4.3/src/meta/regex.rs:2385:9
7: playground::main
at ./src/main.rs:6:5
8: core::ops::function::FnOnce::call_once
at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
What is the expected behavior?
It should not panic, and allow using that cache on the new regex.
Additional info
One example of a location this panics is: https://github.com/rust-lang/regex/blob/master/regex-automata/src/meta/wrappers.rs#L799
although it looks like other reset
implementations have similar issues.