2020-10-09 11:29:54 +08:00
#!/bin/sh
#
# This script is to make a quick check that the fuzzers work,
# good when working locally developing the fuzzers or making
# sure code changes still pass the fuzzers.
#
# It will download the corpus from bintray (kept up to date
# by the crontab github actions) unless a local out/ directory
# already exists.
#
# Run it standing in the root of the simdjson repository.
#
# By Paul Dreik 20201003
set -eu
for prog in wget tar cmake; do
if ! which $prog >/dev/null; then
echo please install $prog
exit 1
fi
done
#download the corpus if it does not already exist
if [ ! -d out ] ; then
2021-04-13 04:58:30 +08:00
# ideally, we would download the github artifact but that requires being logged in which can not
# easily be fixed from this shell script.
echo "NOTE! please go to the artifacts page on https://github.com/simdjson/simdjson/actions/workflows/fuzzers.yml and download the latest corpus.tar.zip artifact manually to speed up fuzzing"
sleep 5s
2020-10-09 11:29:54 +08:00
fi
2020-10-31 15:22:49 +08:00
# By default, use the debug friendly variant since this script is intended
# for developers reproducing bugs/validating fixes locally.
builddir = build-sanitizers-O0
#...but feel free to use this one instead, if you want to build coverage fast.
#builddir=build-fast
2020-10-09 11:29:54 +08:00
if [ ! -d $builddir ] ; then
fuzz/build_fuzzer_variants.sh
else
cmake --build $builddir --target all_fuzzers
fi
fuzzernames = $( cmake --build $builddir --target print_all_fuzzernames | tail -n1)
for fuzzer in $fuzzernames ; do
exe = $builddir /fuzz/$fuzzer
shortname = $( echo $fuzzer | cut -f2- -d_)
echo found fuzzer $shortname with executable $exe
mkdir -p out/$shortname
others = $( find out -type d -not -name $shortname -not -name out -not -name cmin)
$exe -max_total_time= 20 -max_len= 4000 out/$shortname $others
echo "*************************************************************************"
done
echo " all is good, no errors found in any of these fuzzers: $fuzzernames "