#! /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 # Wrong compiler used. 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