mirror of
https://github.com/fluencelabs/parity-wasm
synced 2025-06-10 13:31:38 +00:00
add decoder fuzzer
This commit is contained in:
25
fuzz/Cargo.toml
Normal file
25
fuzz/Cargo.toml
Normal 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"
|
37
fuzz/fuzz_targets/fuzz_decode.rs
Normal file
37
fuzz/fuzz_targets/fuzz_decode.rs
Normal 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();
|
||||
});
|
Reference in New Issue
Block a user