capnproto

FORK: Cap'n Proto serialization/RPC system - core tools and C++ library
git clone https://git.neptards.moe/neptards/capnproto.git
Log | Files | Refs | README | LICENSE

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