diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml index a18a45652e..9e0a4697eb 100644 --- a/.azure-pipelines.yml +++ b/.azure-pipelines.yml @@ -97,6 +97,30 @@ jobs: RUST_BACKTRACE: 1 condition: and(succeeded(), eq(variables['toolchain'], 'nightly')) +- job: Fuzz_regression + displayName: Fuzz regression + pool: + vmImage: "ubuntu-16.04" + variables: + toolchain: nightly + steps: + - template: ci/azure-install-rust.yml + - bash: cargo install cargo-fuzz + - bash: ci/fuzzit.sh local-regression + +- job: Fuzz + condition: ne(variables['Build.Reason'], 'PullRequest') + pool: + vmImage: "ubuntu-16.04" + variables: + toolchain: nightly + steps: + - template: ci/azure-install-rust.yml + - bash: cargo install cargo-fuzz + - bash: ci/fuzzit.sh fuzzing + env: + FUZZIT_API_KEY: $(FUZZIT_API_KEY) + - job: Build strategy: matrix: diff --git a/cranelift/README.md b/cranelift/README.md index 3bfa2dc6cd..171055d030 100644 --- a/cranelift/README.md +++ b/cranelift/README.md @@ -8,6 +8,7 @@ into executable machine code. [![Documentation Status](https://readthedocs.org/projects/cranelift/badge/?version=latest)](https://cranelift.readthedocs.io/en/latest/?badge=latest) [![Travis Status](https://travis-ci.org/CraneStation/cranelift.svg?branch=master)](https://travis-ci.org/CraneStation/cranelift) +[![Fuzzit Status](https://app.fuzzit.dev/badge?org_id=CraneStation)](https://app.fuzzit.dev/orgs/CraneStation/dashboard) [![Gitter chat](https://badges.gitter.im/CraneStation/CraneStation.svg)](https://gitter.im/CraneStation/Lobby) ![Minimum rustc 1.37](https://img.shields.io/badge/rustc-1.37+-green.svg) diff --git a/cranelift/ci/fuzzit.sh b/cranelift/ci/fuzzit.sh new file mode 100755 index 0000000000..c08fb3c64e --- /dev/null +++ b/cranelift/ci/fuzzit.sh @@ -0,0 +1,38 @@ +#!/bin/bash +set -xe + +# Validate arguments +if [ "$#" -ne 1 ]; then + cat << EOF +Usage: $0 + +Types are: +local-regression - Run corpus and past crashes locally to catch regressions. +fuzzing - Submit for long run fuzzing on Fuzzit. +EOF + exit 1 +fi + +# Configure +set -xe +NAME=cranelift +TYPE=$1 +FUZZIT_VERSION=2.4.46 + +# Setup +if [[ ! -f fuzzit || ! `./fuzzit --version` =~ $FUZZIT_VERSION$ ]]; then + wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v$FUZZIT_VERSION/fuzzit_Linux_x86_64 + chmod a+x fuzzit +fi +./fuzzit --version + +# Fuzz +function fuzz { + FUZZER=$1 + TARGET=$2 + cargo fuzz run $FUZZER -- -runs=0 + ./fuzzit --version + ./fuzzit create job --type $TYPE $NAME/$TARGET ./fuzz/target/x86_64-unknown-linux-gnu/debug/$FUZZER +} +fuzz fuzz_translate_module translate-module +fuzz fuzz_reader_parse_test reader-parse diff --git a/cranelift/fuzz/fuzz_reader_parse_test.rs b/cranelift/fuzz/fuzz_reader_parse_test.rs index cccf135916..4f17898264 100644 --- a/cranelift/fuzz/fuzz_reader_parse_test.rs +++ b/cranelift/fuzz/fuzz_reader_parse_test.rs @@ -6,6 +6,7 @@ use std::str; fuzz_target!(|data: &[u8]| { if let Ok(s) = str::from_utf8(data) { - let _ = cranelift_reader::parse_test(s, None, None); + let options = cranelift_reader::ParseOptions::default(); + let _ = cranelift_reader::parse_test(s, options); } });