afl-fuzz.sh 1.22 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
#! /bin/bash

set -euo pipefail

echo "Choose test case:"
echo "1) TestAllTypes parsing"
echo "2) TestLists parsing"
echo "3) Canonicalization"

read -p "choice: " -n 1 TESTCASE
echo

case "$TESTCASE" in
  1 )
    TESTDATA=binary
    FLAGS=
    TESTNAME=default
    ;;
  2 )
    TESTDATA=lists.binary
    FLAGS=--lists
    TESTNAME=lists
    ;;
  3 )
    TESTDATA=binary
    FLAGS=--canonicalize
    TESTNAME=canonicalize
    ;;
  * )
    echo "Invalid choice: $TESTCASE" >&2
    exit 1
esac

echo "Choose compiler:"
echo "1) GCC"
echo "2) Clang"

read -p "choice: " -n 1 TESTCASE
echo

case "$TESTCASE" in
  1 )
    export CXX=afl-g++
    ;;
  2 )
    export CXX=afl-clang++
    ;;
  * )
    echo "Invalid choice: $TESTCASE" >&2
    exit 1
esac

if [ -e Makefile ]; then
  if ! grep -q '^CXX *= *'"$CXX" Makefile; then
David Renshaw's avatar
David Renshaw committed
55
    # Wrong compiler used.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
    make distclean
    $(dirname $0)/configure --disable-shared
  fi
else
  $(dirname $0)/configure --disable-shared
fi

make -j$(nproc)
make -j$(nproc) capnp-afl-testcase

NOW=$(date +%Y-%m-%d.%H-%M-%S).$TESTNAME.$CXX

mkdir afl.$NOW.inputs afl.$NOW.findings

cp $(dirname $0)/src/capnp/testdata/$TESTDATA afl.$NOW.inputs

afl-fuzz -i afl.$NOW.inputs -o afl.$NOW.findings -- ./capnp-afl-testcase $FLAGS