diff --git a/.travis.yml b/.travis.yml index 1e9b611..025c019 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,9 @@ sudo: false os: - linux +services: + - docker + go: - 1.10.x - 1.11.x @@ -19,6 +22,18 @@ script: - go vet ./... - go test ./... +jobs: + include: + - stage: Fuzz regression + go: 1.12.x + dist: bionic + script: ./fuzzit.sh local-regression + - stage: Fuzz + if: branch = master AND type IN (push) + go: 1.12.x + dist: bionic + script: ./fuzzit.sh fuzzing + before_deploy: - mkdir -p release - "GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags -a -tags netgo -ldflags '-s -w -extldflags -static' -o release/transfersh-$TRAVIS_TAG-linux-amd64" diff --git a/fuzzit.sh b/fuzzit.sh new file mode 100755 index 0000000..1daa39c --- /dev/null +++ b/fuzzit.sh @@ -0,0 +1,38 @@ +#!/bin/bash +set -xe + +# Validate arguments +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " + exit 1 +fi +if [ -z "$FUZZIT_API_KEY" ]; then + echo "Set FUZZIT_API_KEY to your Fuzzit API key" + exit 2 +fi + +# Configure +ROOT=./server +TYPE=$1 + +# Setup +export GO111MODULE="off" +go get -u github.com/dvyukov/go-fuzz/go-fuzz github.com/dvyukov/go-fuzz/go-fuzz-build +go get -d -v -u ./... +if [ ! -f fuzzit ]; then + wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v2.4.29/fuzzit_Linux_x86_64 + chmod a+x fuzzit +fi + +# Fuzz +function fuzz { + FUNC=Fuzz$1 + TARGET=$2 + DIR=${3:-$ROOT} + go-fuzz-build -libfuzzer -func $FUNC -o fuzzer.a $DIR + clang -fsanitize=fuzzer fuzzer.a -o fuzzer + ./fuzzit create job --type $TYPE $TARGET fuzzer +} +fuzz Profile profile +fuzz HTTP http +fuzz HTTPS https