Path: blob/main/fuzz/fuzz_targets/call_async.rs
1690 views
#![no_main]12use libfuzzer_sys::arbitrary::{Result, Unstructured};3use libfuzzer_sys::fuzz_target;4use wasmtime_fuzzing::{generators, oracles};56fuzz_target!(|data: &[u8]| {7// errors in `run` have to do with not enough input in `data`, which we8// ignore here since it doesn't affect how we'd like to fuzz.9let _ = run_one(data);10});1112fn run_one(data: &[u8]) -> Result<()> {13let mut u = Unstructured::new(data);14let mut config: generators::Config = u.arbitrary()?;1516// Try to ensure imports/exports/etc are generated by adding one to the17// minimums/maximums.18config.module_config.config.min_types = 1;19config.module_config.config.max_types += 1;20config.module_config.config.min_imports = 1;21config.module_config.config.max_imports += 1;22config.module_config.config.min_funcs = 1;23config.module_config.config.max_funcs += 1;24config.module_config.config.min_exports = 1;25config.module_config.config.max_exports += 1;2627// Use the fuzz input to select an async strategy.28config.enable_async(&mut u)?;2930let mut poll_amts = Vec::with_capacity(u.arbitrary_len::<u32>()?);31for _ in 0..poll_amts.capacity() {32poll_amts.push(u.int_in_range(0..=10_000)?);33}34let module = config.module_config.generate(&mut u, None)?;35oracles::call_async(&module.to_bytes(), &config, &poll_amts);3637Ok(())38}394041