afl-fuzz.sh (1251B)
1 #! /bin/bash 2 3 set -euo pipefail 4 5 echo "Choose test case:" 6 echo "1) TestAllTypes parsing" 7 echo "2) TestLists parsing" 8 echo "3) Canonicalization" 9 10 read -p "choice: " -n 1 TESTCASE 11 echo 12 13 case "$TESTCASE" in 14 1 ) 15 TESTDATA=binary 16 FLAGS= 17 TESTNAME=default 18 ;; 19 2 ) 20 TESTDATA=lists.binary 21 FLAGS=--lists 22 TESTNAME=lists 23 ;; 24 3 ) 25 TESTDATA=binary 26 FLAGS=--canonicalize 27 TESTNAME=canonicalize 28 ;; 29 * ) 30 echo "Invalid choice: $TESTCASE" >&2 31 exit 1 32 esac 33 34 echo "Choose compiler:" 35 echo "1) GCC" 36 echo "2) Clang" 37 38 read -p "choice: " -n 1 TESTCASE 39 echo 40 41 case "$TESTCASE" in 42 1 ) 43 export CXX=afl-g++ 44 ;; 45 2 ) 46 export CXX=afl-clang++ 47 ;; 48 * ) 49 echo "Invalid choice: $TESTCASE" >&2 50 exit 1 51 esac 52 53 if [ -e Makefile ]; then 54 if ! grep -q '^CXX *= *'"$CXX" Makefile; then 55 # Wrong compiler used. 56 make distclean 57 $(dirname $0)/configure --disable-shared 58 fi 59 else 60 $(dirname $0)/configure --disable-shared 61 fi 62 63 make -j$(nproc) 64 make -j$(nproc) capnp-afl-testcase 65 66 NOW=$(date +%Y-%m-%d.%H-%M-%S).$TESTNAME.$CXX 67 68 mkdir afl.$NOW.inputs afl.$NOW.findings 69 70 cp $(dirname $0)/src/capnp/testdata/$TESTDATA afl.$NOW.inputs 71 72 afl-fuzz -i afl.$NOW.inputs -o afl.$NOW.findings -- ./capnp-afl-testcase $FLAGS