Fix fuel configuration in fuzzers (#4440)
Previously fuel configuration in our fuzzers ran afoul of #4439 so this commit fixes how fuel is managed to avoid that issue.
This commit is contained in:
@@ -124,13 +124,8 @@ pub fn instantiate(wasm: &[u8], known_valid: bool, config: &generators::Config,
|
|||||||
|
|
||||||
let mut timeout_state = SignalOnDrop::default();
|
let mut timeout_state = SignalOnDrop::default();
|
||||||
match timeout {
|
match timeout {
|
||||||
Timeout::Fuel(fuel) => {
|
Timeout::Fuel(fuel) => set_fuel(&mut store, fuel),
|
||||||
// consume the default fuel in the store ...
|
|
||||||
let remaining = store.consume_fuel(0).unwrap();
|
|
||||||
store.consume_fuel(remaining - 1).unwrap();
|
|
||||||
// ... then add back in how much fuel we're allowing here
|
|
||||||
store.add_fuel(fuel).unwrap();
|
|
||||||
}
|
|
||||||
// If a timeout is requested then we spawn a helper thread to wait for
|
// If a timeout is requested then we spawn a helper thread to wait for
|
||||||
// the requested time and then send us a signal to get interrupted. We
|
// the requested time and then send us a signal to get interrupted. We
|
||||||
// also arrange for the thread's sleep to get interrupted if we return
|
// also arrange for the thread's sleep to get interrupted if we return
|
||||||
@@ -553,12 +548,7 @@ pub fn table_ops(mut fuzz_config: generators::Config, ops: generators::table_ops
|
|||||||
{
|
{
|
||||||
fuzz_config.wasmtime.consume_fuel = true;
|
fuzz_config.wasmtime.consume_fuel = true;
|
||||||
let mut store = fuzz_config.to_store();
|
let mut store = fuzz_config.to_store();
|
||||||
|
set_fuel(&mut store, 1_000);
|
||||||
// consume the default fuel in the store ...
|
|
||||||
let remaining = store.consume_fuel(0).unwrap();
|
|
||||||
store.consume_fuel(remaining - 1).unwrap();
|
|
||||||
// ... then add back in how much fuel we're allowing here
|
|
||||||
store.add_fuel(1_000).unwrap();
|
|
||||||
|
|
||||||
let wasm = ops.to_wasm_binary();
|
let wasm = ops.to_wasm_binary();
|
||||||
log_wasm(&wasm);
|
log_wasm(&wasm);
|
||||||
@@ -992,3 +982,16 @@ impl Drop for SignalOnDrop {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_fuel<T>(store: &mut Store<T>, fuel: u64) {
|
||||||
|
// Determine the amount of fuel already within the store, if any, and
|
||||||
|
// add/consume as appropriate to set the remaining amount to` fuel`.
|
||||||
|
let remaining = store.consume_fuel(0).unwrap();
|
||||||
|
if fuel > remaining {
|
||||||
|
store.add_fuel(fuel - remaining).unwrap();
|
||||||
|
} else {
|
||||||
|
store.consume_fuel(remaining - fuel).unwrap();
|
||||||
|
}
|
||||||
|
// double-check that the store has the expected amount of fuel remaining
|
||||||
|
assert_eq!(store.consume_fuel(0).unwrap(), fuel);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user