add decoder fuzzer

This commit is contained in:
Pat Hickey
2017-09-06 17:33:12 -07:00
parent 6f162b89ed
commit 06073b9e1c
2 changed files with 62 additions and 0 deletions

25
fuzz/Cargo.toml Normal file
View File

@ -0,0 +1,25 @@
[package]
name = "parity-wasm-fuzz"
version = "0.0.1"
authors = ["Automatically generated"]
publish = false
[package.metadata]
cargo-fuzz = true
[dependencies.parity-wasm]
path = ".."
[dependencies.libfuzzer-sys]
git = "https://github.com/rust-fuzz/libfuzzer-sys.git"
[dependencies.mktemp]
version = "0.3.1"
# Prevent this from interfering with workspaces
[workspace]
members = ["."]
[[bin]]
name = "fuzz_decode"
path = "fuzz_targets/fuzz_decode.rs"

View File

@ -0,0 +1,37 @@
#![no_main]
#[macro_use]
extern crate libfuzzer_sys;
extern crate parity_wasm;
extern crate mktemp;
use std::fs::File;
use std::io::Write;
use std::process::Command;
fuzz_target!(|data: &[u8]| {
let seed = mktemp::Temp::new_file().unwrap();
let mut seedfile = File::create(seed.as_ref()).unwrap();
seedfile.write_all(data).unwrap();
seedfile.flush().unwrap();
let wasm = mktemp::Temp::new_file().unwrap();
let opt_fuzz = Command::new("wasm-opt")
.arg("--translate-to-fuzz")
.arg(seed.as_ref())
.arg("-o")
.arg(wasm.as_ref())
.output()
.unwrap();
assert!(
opt_fuzz.status.success(),
format!(
"wasm-opt failed with: {}",
String::from_utf8_lossy(&opt_fuzz.stderr)
)
);
let _module: parity_wasm::elements::Module = parity_wasm::deserialize_file(wasm.as_ref())
.unwrap();
});