#!/bin/bash set -e cd $(git rev-parse --show-toplevel)/ # rm -rf ./build export CC=$(which afl-clang-lto) export CXX=$(which afl-clang-lto++) export AR=$(which llvm-ar) export RANLIB=$(which llvm-ranlib) export AS=$(which llvm-as) conan build . \ -c tools.system.package_manager:mode=install \ -c tools.cmake.cmaketoolchain:generator=Ninja \ -c tools.build:compiler_executables='{"c": "afl-clang-lto", "cpp": "afl-clang-lto++"}' \ -s build_type=Release \ -s compiler=clang \ -s compiler.version=20 \ -s compiler.libcxx=libc++ \ -o use_mold=True \ --build=missing \ --build=missing fuzz_test_count=$(find ./build -type f -name '*_fuzz' -executable | wc -l) total_fuzz_time=60 # in seconds time_per_fuzz=$((total_fuzz_time / fuzz_test_count)) echo "Fuzz test count: ${fuzz_test_count}" echo "Total fuzz time: ${total_fuzz_time}" echo "Time per fuzz: ${time_per_fuzz}" export AFL_SKIP_CPUFREQ=1 export AFL_NO_UI=1 for fuzz_name in $(find ./build -type f -name '*_fuzz' -executable); do base_name=$(basename $fuzz_name) out_path="/fuzz/${base_name}_out" in_path="/fuzz/${base_name}_in" echo "Running ${fuzz_name} for ${time_per_fuzz} seconds..." echo "base_name: ${base_name}" echo "out_path: ${out_path}" echo "in_path: ${in_path}" if [[ ! -e $dir ]]; then echo "No directories detected for ${base_name}" echo "Creating dummy files..." mkdir -p ${in_path} mkdir -p ${out_path} echo "0" > ${in_path}/a fi afl-fuzz -V $time_per_fuzz -i $in_path -o $out_path -- $fuzz_name done