| #! /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 |