diff --git a/fuzz/fuzz_targets/fuzz_target_1.rs b/fuzz/fuzz_targets/fuzz_target_1.rs index b74ffa47..5685ae72 100644 --- a/fuzz/fuzz_targets/fuzz_target_1.rs +++ b/fuzz/fuzz_targets/fuzz_target_1.rs @@ -23,7 +23,6 @@ fuzz_target!(|data: &[u8]| { let program = vm2::initial_decommit(&mut world, address); let mut state = VirtualMachine::new( - Box::new(world), address, program, H160::zero(), @@ -35,5 +34,5 @@ fuzz_target!(|data: &[u8]| { hook_address: 0, }, ); - state.run(); + state.run(&mut world); }); diff --git a/src/arbitrary_instruction.rs b/src/arbitrary_instruction.rs index 8e2cfc07..4938a9ec 100644 --- a/src/arbitrary_instruction.rs +++ b/src/arbitrary_instruction.rs @@ -1,3 +1,4 @@ +use crate::addressing_modes::Arguments; use crate::instruction_handlers::{ Add, And, CallingMode, Div, Heap, Mul, Or, PtrAdd, PtrPack, PtrShrink, PtrSub, RotateLeft, RotateRight, ShiftLeft, ShiftRight, Sub, Xor, @@ -13,13 +14,17 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()? }; + // 1 to 4 are reserved gas costs and also skip 0 + let gas_cost = u.arbitrary::()?.checked_add(5).unwrap_or(255); + let arguments = Arguments::new(predicate, gas_cost as u32); + Ok(match u.choose_index(23)? { 0 => Self::from_binop::( u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, (), - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -28,7 +33,7 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, (), - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -37,7 +42,7 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, (), - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -46,7 +51,7 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, (), - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -55,7 +60,7 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, (), - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -64,7 +69,7 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, (), - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -73,7 +78,7 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, (), - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -82,7 +87,7 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, (), - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -91,7 +96,7 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, (), - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -100,7 +105,7 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, (), - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -109,7 +114,7 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), @@ -118,60 +123,60 @@ impl<'a> Arbitrary<'a> for Instruction { u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, - predicate, + arguments, u.arbitrary()?, u.arbitrary()?, ), - 12 => Self::from_jump(u.arbitrary()?, predicate), + 12 => Self::from_jump(u.arbitrary()?, arguments), 13 => Self::from_ptr::( u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, - predicate, + arguments, u.arbitrary()?, ), 14 => Self::from_ptr::( u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, - predicate, + arguments, u.arbitrary()?, ), 15 => Self::from_ptr::( u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, - predicate, + arguments, u.arbitrary()?, ), 16 => Self::from_ptr::( u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, - predicate, + arguments, u.arbitrary()?, ), 17 => { - Self::from_load::(u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, predicate) + Self::from_load::(u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, arguments) } 18 => Self::from_store::( u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, - predicate, + arguments, false, ), 19 => { - Self::from_load_pointer(u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, predicate) + Self::from_load_pointer(u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, arguments) } - 20 => Self::from_sstore(u.arbitrary()?, u.arbitrary()?, predicate), - 21 => Self::from_sload(u.arbitrary()?, u.arbitrary()?, predicate), + 20 => Self::from_sstore(u.arbitrary()?, u.arbitrary()?, arguments), + 21 => Self::from_sload(u.arbitrary()?, u.arbitrary()?, arguments), 22 => Self::from_far_call::<{ CallingMode::Normal as u8 }>( u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, u.arbitrary()?, - predicate, + arguments, ), _ => unreachable!(), })