From eda488233f49bb7356bed91f932b8c2a93a39171 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 5 Feb 2018 17:36:53 +0300 Subject: [PATCH] Fix fuzz (#35) * Add checking for fuzz. * Use wabt's validation instead of wasm2wat. Fixes #16 Fixes #34 * Check fuzz with nightly. * Install nightly toolchain * Travis Driven Development #1 * Travis Driven Development #2 --- .travis.yml | 7 +++++++ doc.sh | 2 +- fuzz/Cargo.toml | 2 +- fuzz/fuzz_targets/load.rs | 12 ++++++------ 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index ba7e83b..03c14d8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,12 +11,19 @@ addons: - gcc-6 - g++-6 - cmake +env: +- NIGHTLY_TOOLCHAIN=nightly-2018-02-05 + install: # Install `cargo-deadlinks` unless it is currently installed. - command -v cargo-deadlinks &> /dev/null || cargo install cargo-deadlinks +# Install nightly toolchain. +- rustup toolchain install $NIGHTLY_TOOLCHAIN script: - export CC=/usr/bin/gcc-6 - export CXX=/usr/bin/g++-6 +# Make sure fuzz targets are not broken. +- rustup run $NIGHTLY_TOOLCHAIN cargo check --tests --manifest-path=fuzz/Cargo.toml - ./test.sh - ./doc.sh after_success: | diff --git a/doc.sh b/doc.sh index 652db79..4c20b7a 100755 --- a/doc.sh +++ b/doc.sh @@ -4,7 +4,7 @@ set -eux cd $(dirname $0) -cargo doc +rustup run $NIGHTLY_TOOLCHAIN cargo doc # cargo-deadlinks will check any links in docs generated by `cargo doc`. # This is useful as rustdoc uses raw links which are error prone. diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 149923a..5b86661 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -10,7 +10,7 @@ cargo-fuzz = true [dependencies] wasmi = { path = ".." } -wabt = "0.1.6" +wabt = "0.1.7" [dependencies.libfuzzer-sys] git = "https://github.com/rust-fuzz/libfuzzer-sys.git" diff --git a/fuzz/fuzz_targets/load.rs b/fuzz/fuzz_targets/load.rs index 73ed742..0c98907 100644 --- a/fuzz/fuzz_targets/load.rs +++ b/fuzz/fuzz_targets/load.rs @@ -1,13 +1,13 @@ #![no_main] -#[macro_use] extern crate libfuzzer_sys; -extern crate wasmi; +#[macro_use] +extern crate libfuzzer_sys; extern crate wabt; +extern crate wasmi; fuzz_target!(|data: &[u8]| { - let wasmi_result = wasmi::load_from_buffer(data); - - // TODO: Do validation only! https://github.com/pepyakin/wasmi/issues/16 - let wabt_result = wabt::wasm2wat(data); + let wasmi_result = wasmi::Module::from_buffer(data); + let wabt_result = + wabt::Module::read_binary(data, &Default::default()).and_then(|m| m.validate()); assert_eq!(wasmi_result.is_ok(), wabt_result.is_ok()); });