waffle/fuzz/fuzz_targets/roundtrip.rs

32 lines
1.1 KiB
Rust
Raw Permalink Normal View History

2021-11-14 08:00:34 +00:00
#![no_main]
use libfuzzer_sys::fuzz_target;
use waffle::{FrontendError, FrontendOptions, Module, OptOptions};
2021-11-14 08:00:34 +00:00
fuzz_target!(|module: wasm_smith::Module| {
let _ = env_logger::try_init();
2021-11-20 20:20:34 +00:00
log::debug!("original module: {:?}", module);
2021-11-14 08:00:34 +00:00
let orig_bytes = module.to_bytes();
2023-02-17 00:20:54 +00:00
let mut parsed_module =
match Module::from_wasm_bytes(&orig_bytes[..], &FrontendOptions::default()) {
Ok(m) => m,
Err(e) => {
match e.downcast::<FrontendError>() {
Ok(FrontendError::UnsupportedFeature(_)) | Ok(FrontendError::TooLarge(_)) => {
// Just skip this case.
return;
}
Ok(e) => {
panic!("Frontend error: {:?}", e);
}
Err(e) => {
panic!("Other error when parsing module: {:?}", e);
}
}
}
2023-02-17 00:20:54 +00:00
};
parsed_module.expand_all_funcs().unwrap();
parsed_module.per_func_body(|body| body.optimize(&OptOptions::default()));
2021-11-14 08:00:34 +00:00
let _ = parsed_module.to_wasm_bytes();
});