Add fuzz target

This commit is contained in:
Rerumu 2021-11-28 15:30:11 -05:00
parent c323b35961
commit dd55770f43
5 changed files with 59 additions and 1 deletions

View File

@ -1,2 +1,2 @@
[workspace] [workspace]
members = ["wasm"] members = ["fuzz", "wasm"]

2
fuzz/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
corpus
artifacts

25
fuzz/Cargo.toml Normal file
View File

@ -0,0 +1,25 @@
[package]
name = "fuzz"
version = "0.0.0"
publish = false
edition = "2021"
[package.metadata]
cargo-fuzz = true
[dependencies]
libfuzzer-sys = "0.4"
wasm-smith = "0.8.0"
[dependencies.parity-wasm]
git = "https://github.com/paritytech/parity-wasm.git"
features = ["multi_value", "sign_ext"]
[dependencies.wasm]
path = "../wasm"
[[bin]]
name = "translator"
path = "fuzz_targets/translator.rs"
test = false
doc = false

View File

@ -0,0 +1,30 @@
#![no_main]
use std::io::Result;
use parity_wasm::elements::Module as WasmModule;
use wasm_smith::Module as SmModule;
use wasm::backend::{
edition::{data::Edition, luajit::LuaJIT},
translator::data::Module,
};
fn fuzz_translate(wasm: &WasmModule, ed: &dyn Edition) -> Result<()> {
let mut sink = std::io::sink();
let module = Module::new(wasm);
module.translate(ed, &mut sink)
}
// We are not interested in parity_wasm errors.
// Only 1 edition should need to be tested too.
libfuzzer_sys::fuzz_target!(|module: SmModule| {
let data = module.to_bytes();
let wasm = match parity_wasm::deserialize_buffer(&data) {
Ok(v) => v,
Err(_) => return,
};
fuzz_translate(&wasm, &LuaJIT).expect("LuaJIT should succeed");
});

1
wasm/src/lib.rs Normal file
View File

@ -0,0 +1 @@
pub mod backend;