Skip to content

Commit 7580250

Browse files
feat(fuzz): add dedicated chainman setup fuzz target
Add a new fuzz target for testing chainstate manager initialization.
1 parent af79b4c commit 7580250

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

fuzz/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ test = false
2525
doc = false
2626
bench = false
2727

28+
[[bin]]
29+
name = "fuzz_target_chainman_setup"
30+
path = "fuzz_targets/fuzz_target_chainman_setup.rs"
31+
test = false
32+
doc = false
33+
bench = false
34+
2835
[[bin]]
2936
name = "fuzz_target_verify"
3037
path = "fuzz_targets/fuzz_target_verify.rs"
@@ -38,3 +45,4 @@ path = "fuzz_targets/fuzz_target_block.rs"
3845
test = false
3946
doc = false
4047
bench = false
48+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#![no_main]
2+
use std::sync::Arc;
3+
4+
use arbitrary::Arbitrary;
5+
use bitcoinkernel::ChainType;
6+
use fuzz_common::{cleanup_dir, create_chainstate_manager, init_logging, ChainstateSetupConfig};
7+
use libfuzzer_sys::fuzz_target;
8+
9+
#[derive(Debug, Arbitrary)]
10+
pub struct SetupInput {
11+
pub config: ChainstateSetupConfig,
12+
}
13+
14+
pub fn create_simple_context(chain_type: ChainType) -> std::sync::Arc<bitcoinkernel::Context> {
15+
use bitcoinkernel::ContextBuilder;
16+
17+
Arc::new(
18+
ContextBuilder::new()
19+
.chain_type(chain_type)
20+
.build()
21+
.unwrap(),
22+
)
23+
}
24+
25+
fuzz_target!(|data: SetupInput| {
26+
init_logging();
27+
28+
let context = create_simple_context(data.config.chain_type.clone().into());
29+
let data_dir = data.config.create_fuzz_data_dir("setup");
30+
31+
let Some(chainman) = create_chainstate_manager(&context, &data.config, &data_dir) else {
32+
return;
33+
};
34+
35+
drop(chainman);
36+
cleanup_dir(&data_dir);
37+
});

0 commit comments

Comments
 (0)