Skip to content

Commit 7b83941

Browse files
committed
test(fuzz): add fuzz_rlp_decode and fuzz_evm_opcode targets (#33)
1 parent c7909cc commit 7b83941

3 files changed

Lines changed: 60 additions & 0 deletions

File tree

fuzz/Cargo.toml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,17 @@ path = "fuzz_targets/fuzz_rlp.rs"
4040
test = false
4141
doc = false
4242
bench = false
43+
44+
[[bin]]
45+
name = "fuzz_rlp_decode"
46+
path = "fuzz_targets/fuzz_rlp_decode.rs"
47+
test = false
48+
doc = false
49+
bench = false
50+
51+
[[bin]]
52+
name = "fuzz_evm_opcode"
53+
path = "fuzz_targets/fuzz_evm_opcode.rs"
54+
test = false
55+
doc = false
56+
bench = false
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#![no_main]
2+
3+
use hca_rs::evm::opcode::validate_leaf_script;
4+
use libfuzzer_sys::fuzz_target;
5+
6+
fuzz_target!(|data: &[u8]| {
7+
// Feed arbitrary bytecode — including PUSH data, truncated PUSH at EOF,
8+
// banned opcodes, and random sequences — into the validator.
9+
// Must never panic — only return Ok or Err.
10+
let _ = validate_leaf_script(data);
11+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#![no_main]
2+
3+
use hca_rs::rlp::{decode_bytes, decode_hca_tx, decode_list, decode_uint};
4+
use libfuzzer_sys::fuzz_target;
5+
6+
fuzz_target!(|data: &[u8]| {
7+
if data.is_empty() {
8+
return;
9+
}
10+
11+
// Use first byte to select which decoder to fuzz
12+
let test_type = data[0] % 4;
13+
let input = &data[1..];
14+
15+
match test_type {
16+
0 => {
17+
// Fuzz decode_bytes: malformed inputs, truncated data, oversized lengths
18+
let _ = decode_bytes(input);
19+
}
20+
1 => {
21+
// Fuzz decode_uint: should never return a value wider than u128
22+
let _ = decode_uint(input);
23+
}
24+
2 => {
25+
// Fuzz decode_list: random list prefixes, truncated payloads
26+
let _ = decode_list(input);
27+
}
28+
3 => {
29+
// Fuzz decode_hca_tx: full transaction decoding with arbitrary bytes
30+
// Must never panic — only return Ok or Err
31+
let _ = decode_hca_tx(input);
32+
}
33+
_ => unreachable!(),
34+
}
35+
});

0 commit comments

Comments
 (0)