#!/usr/bin/env bash set -eu -o pipefail AFL_HARDEN=1 CONFIGURE_FLAGS="--enable-tests=no --enable-fuzz-main" ZCUTIL=$(realpath "./zcutil") export AFL_LOG_DIR="$(pwd)" FUZZ_OPTIONS_STRING="Options are: CheckBlock, DecodeHexTx, DeserializeAddrMan, DeserializeTx or ReadFeeEstimates" required_options_count=0 DEFAULT_BUILD_CC="CC=$ZCUTIL/afl/zcash-wrapper-gcc" DEFAULT_BUILD_CXX="CXX=$ZCUTIL/afl/zcash-wrapper-g++" function help { cat <&2 help exit 1 ;; esac done if ((required_options_count < 2)); then help exit 1 fi case $FUZZ_CASE in CheckBlock|DecodeHexTx|DeserializeAddrMan|DeserializeTx|ReadFeeEstimates);; *) echo "fuzz case option is invalid. ($FUZZ_OPTIONS_STRING)" exit 1 ;; esac cp "./src/fuzzing/$FUZZ_CASE/fuzz.cpp" src/fuzz.cpp CONFIGURE_FLAGS="$CONFIGURE_FLAGS" $ZCUTIL/build.sh $DEFAULT_BUILD_CC $DEFAULT_BUILD_CXX AFL_HARDEN=$AFL_HARDEN -j$(nproc) "$@" echo "Build finished. You can now run AFL as follows:" echo "./zcutil/afl/afl-run.sh -i $AFL_INSTALL_DIR -f $FUZZ_CASE"