Browse Source

Limit the size of functions in the `stacks` fuzzer (#4727)

* Limit the size of functions in the `stacks` fuzzer

The fuzzers recently found a timeout in this fuzz test case related to
the compile time of the generated module. Inspecting the generated
module showed that it had 100k+ opcodes for one function, so this commit
updates the fuzzer to limit the number of operations per-function to a
smaller amount to avoid timeout limits.

* Use `arbitrary_len` for `ops` length

* Fix a max/min flip
pull/4732/head
Alex Crichton 2 years ago
committed by GitHub
parent
commit
2696462ccb
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      crates/fuzzing/src/generators/stacks.rs

6
crates/fuzzing/src/generators/stacks.rs

@ -11,6 +11,7 @@ use arbitrary::{Arbitrary, Result, Unstructured};
use wasm_encoder::Instruction;
const MAX_FUNCS: usize = 20;
const MAX_OPS: usize = 1_000;
/// Generate a Wasm module that keeps track of its current call stack, to
/// compare to the host.
@ -50,7 +51,10 @@ impl Stacks {
let mut work_list = vec![0];
while let Some(f) = work_list.pop() {
let mut ops = u.arbitrary::<Vec<Op>>()?;
let mut ops = Vec::with_capacity(u.arbitrary_len::<Op>()?.min(MAX_OPS));
for _ in 0..ops.capacity() {
ops.push(u.arbitrary()?);
}
for op in &mut ops {
match op {
Op::CallThroughHost(idx) | Op::Call(idx) => {

Loading…
Cancel
Save