Skip to content

Commit 5c0e087

Browse files
committed
panic safety
1 parent 2a5d8aa commit 5c0e087

File tree

4 files changed

+49
-35
lines changed

4 files changed

+49
-35
lines changed

fuzz/fuzz_targets/ast_diff_dense_dfa.rs

+13-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#![no_main]
22

3+
use regex_automata::Input;
34
use {
45
libfuzzer_sys::{fuzz_target, Corpus},
56
regex_automata::{
@@ -42,16 +43,18 @@ fn do_fuzz(data: FuzzData) -> Corpus {
4243
return Corpus::Reject;
4344
};
4445

45-
assert_eq!(
46-
re.is_match(&data.haystack),
47-
baseline.is_match(&mut cache, &data.haystack)
48-
);
49-
let found1 = re.find(&data.haystack);
50-
let found2 = baseline.find(&mut cache, &data.haystack);
51-
if let Some(found1) = found1 {
52-
let found2 = found2.expect("Found in target, but not in baseline!");
53-
assert_eq!(found1.start(), found2.start());
54-
assert_eq!(found1.end(), found2.end());
46+
if let Ok(maybe_match) = re.try_search(&Input::new(&pattern)) {
47+
assert_eq!(
48+
maybe_match.is_some(),
49+
baseline.is_match(&mut cache, &data.haystack)
50+
);
51+
let found2 = baseline.find(&mut cache, &data.haystack);
52+
if let Some(found1) = maybe_match {
53+
let found2 =
54+
found2.expect("Found in target, but not in baseline!");
55+
assert_eq!(found1.start(), found2.start());
56+
assert_eq!(found1.end(), found2.end());
57+
}
5558
}
5659

5760
// no captures

fuzz/fuzz_targets/ast_diff_hybrid.rs

+15-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#![no_main]
22

3+
use regex_automata::Input;
34
use {
45
libfuzzer_sys::{fuzz_target, Corpus},
56
regex_automata::{
@@ -43,16 +44,20 @@ fn do_fuzz(data: FuzzData) -> Corpus {
4344
};
4445
let mut hybrid_cache = re.create_cache();
4546

46-
assert_eq!(
47-
re.is_match(&mut hybrid_cache, &data.haystack),
48-
baseline.is_match(&mut cache, &data.haystack)
49-
);
50-
let found1 = re.find(&mut hybrid_cache, &data.haystack);
51-
let found2 = baseline.find(&mut cache, &data.haystack);
52-
if let Some(found1) = found1 {
53-
let found2 = found2.expect("Found in target, but not in baseline!");
54-
assert_eq!(found1.start(), found2.start());
55-
assert_eq!(found1.end(), found2.end());
47+
if let Ok(maybe_match) =
48+
re.try_search(&mut hybrid_cache, &Input::new(&pattern))
49+
{
50+
assert_eq!(
51+
maybe_match.is_some(),
52+
baseline.is_match(&mut cache, &data.haystack)
53+
);
54+
let found2 = baseline.find(&mut cache, &data.haystack);
55+
if let Some(found1) = maybe_match {
56+
let found2 =
57+
found2.expect("Found in target, but not in baseline!");
58+
assert_eq!(found1.start(), found2.start());
59+
assert_eq!(found1.end(), found2.end());
60+
}
5661
}
5762

5863
// no captures

fuzz/fuzz_targets/ast_diff_nfas.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,14 @@ fn do_fuzz(data: FuzzData) -> Corpus {
6161
}
6262
}
6363
let mut backtracker_captures = backtracker.create_captures();
64-
if let Ok(()) = backtracker.try_captures(
65-
&mut backtracker_cache,
66-
&data.haystack,
67-
&mut backtracker_captures,
68-
) {
64+
if backtracker
65+
.try_captures(
66+
&mut backtracker_cache,
67+
&data.haystack,
68+
&mut backtracker_captures,
69+
)
70+
.is_ok()
71+
{
6972
let mut baseline_captures = baseline.create_captures();
7073

7174
baseline.captures(

fuzz/fuzz_targets/ast_diff_sparse_dfa.rs

+13-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#![no_main]
22

3+
use regex_automata::Input;
34
use {
45
libfuzzer_sys::{fuzz_target, Corpus},
56
regex_automata::{
@@ -46,16 +47,18 @@ fn do_fuzz(data: FuzzData) -> Corpus {
4647
};
4748
let re = RegexBuilder::new().build_from_dfas(fwd, rev);
4849

49-
assert_eq!(
50-
re.is_match(&data.haystack),
51-
baseline.is_match(&mut cache, &data.haystack)
52-
);
53-
let found1 = re.find(&data.haystack);
54-
let found2 = baseline.find(&mut cache, &data.haystack);
55-
if let Some(found1) = found1 {
56-
let found2 = found2.expect("Found in target, but not in baseline!");
57-
assert_eq!(found1.start(), found2.start());
58-
assert_eq!(found1.end(), found2.end());
50+
if let Ok(maybe_match) = re.try_search(&Input::new(&pattern)) {
51+
assert_eq!(
52+
maybe_match.is_some(),
53+
baseline.is_match(&mut cache, &data.haystack)
54+
);
55+
let found2 = baseline.find(&mut cache, &data.haystack);
56+
if let Some(found1) = maybe_match {
57+
let found2 =
58+
found2.expect("Found in target, but not in baseline!");
59+
assert_eq!(found1.start(), found2.start());
60+
assert_eq!(found1.end(), found2.end());
61+
}
5962
}
6063

6164
// no captures

0 commit comments

Comments
 (0)