diff --git a/fuzz/fuzz_targets/asm.rs b/fuzz/fuzz_targets/asm.rs index dbadc87a..7f528bf4 100644 --- a/fuzz/fuzz_targets/asm.rs +++ b/fuzz/fuzz_targets/asm.rs @@ -2,21 +2,24 @@ use ckb_vm::cost_model::constant_cycles; use ckb_vm::machine::asm::{AsmCoreMachine, AsmMachine}; use ckb_vm::machine::{DefaultMachineBuilder, VERSION2}; -use ckb_vm::{Bytes, ISA_A, ISA_B, ISA_IMC, ISA_MOP}; +use ckb_vm::{Bytes, Error, ISA_A, ISA_B, ISA_IMC, ISA_MOP}; use libfuzzer_sys::fuzz_target; -fn run(data: &[u8]) { +fn run(data: &[u8]) -> Result { let asm_core = AsmCoreMachine::new(ISA_IMC | ISA_A | ISA_B | ISA_MOP, VERSION2, 200_000); let core = DefaultMachineBuilder::>::new(asm_core) .instruction_cycle_func(Box::new(constant_cycles)) .build(); let mut machine = AsmMachine::new(core); let program = Bytes::copy_from_slice(data); - if let Ok(_) = machine.load_program(&program, &[]) { - let _ = machine.run(); - } + machine.load_program(&program, &[])?; + machine.run() } fuzz_target!(|data: &[u8]| { - run(data); + let r0 = run(data); + let r1 = run(data); + let r2 = run(data); + assert_eq!(r0, r1); + assert_eq!(r1, r2); }); diff --git a/fuzz/fuzz_targets/interpreter.rs b/fuzz/fuzz_targets/interpreter.rs index b19f2bf8..683c344a 100644 --- a/fuzz/fuzz_targets/interpreter.rs +++ b/fuzz/fuzz_targets/interpreter.rs @@ -3,10 +3,10 @@ use ckb_vm::cost_model::constant_cycles; use ckb_vm::machine::{DefaultCoreMachine, DefaultMachineBuilder, VERSION2}; use ckb_vm::memory::sparse::SparseMemory; use ckb_vm::memory::wxorx::WXorXMemory; -use ckb_vm::{Bytes, ISA_A, ISA_B, ISA_IMC, ISA_MOP}; +use ckb_vm::{Bytes, Error, ISA_A, ISA_B, ISA_IMC, ISA_MOP}; use libfuzzer_sys::fuzz_target; -fn run(data: &[u8]) { +fn run(data: &[u8]) -> Result { let machine_core = DefaultCoreMachine::>>::new( ISA_IMC | ISA_A | ISA_B | ISA_MOP, VERSION2, @@ -16,11 +16,14 @@ fn run(data: &[u8]) { .instruction_cycle_func(Box::new(constant_cycles)) .build(); let program = Bytes::copy_from_slice(data); - if let Ok(_) = machine.load_program(&program, &[]) { - let _ = machine.run(); - } + machine.load_program(&program, &[])?; + machine.run() } fuzz_target!(|data: &[u8]| { - run(data); + let r0 = run(data); + let r1 = run(data); + let r2 = run(data); + assert_eq!(r0, r1); + assert_eq!(r1, r2); });