2018-01-14 03:51:07 +03:00
#!/bin/bash
# SPDX-License-Identifier: LGPL-2.1+
set -ex
export LC_CTYPE = C.UTF-8
2018-03-12 17:59:10 +03:00
export CC = ${ CC :- clang }
export CXX = ${ CXX :- clang ++ }
clang_version = " $( $CC --version | sed -nr 's/.*version ([^ ]+?) .*/\1/p' | sed -r 's/-$//' ) "
2018-01-16 18:25:43 +03:00
SANITIZER = ${ SANITIZER :- address -fsanitize-address-use-after-scope }
flags = " -O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize= $SANITIZER -fsanitize-coverage=trace-pc-guard,trace-cmp "
2018-03-12 17:59:10 +03:00
clang_lib = " /usr/lib64/clang/ ${ clang_version } /lib/linux "
[ -d " $clang_lib " ] || clang_lib = " /usr/lib/clang/ ${ clang_version } /lib/linux "
2018-01-16 18:25:43 +03:00
export CFLAGS = ${ CFLAGS :- $flags }
export CXXFLAGS = ${ CXXFLAGS :- $flags }
2018-03-12 17:59:10 +03:00
export LDFLAGS = ${ LDFLAGS :- -L ${ clang_lib } }
2018-01-16 18:25:43 +03:00
export WORK = ${ WORK :- $( pwd ) }
export OUT = ${ OUT :- $( pwd ) /out }
mkdir -p $OUT
2018-01-16 16:36:56 +03:00
build = $WORK /build
rm -rf $build
mkdir -p $build
2018-01-16 18:25:43 +03:00
fuzzflag = "oss-fuzz=true"
if [ -z " $FUZZING_ENGINE " ] ; then
fuzzflag = "llvm-fuzz=true"
fi
meson $build -D$fuzzflag -Db_lundef= false
2018-01-16 16:36:56 +03:00
ninja -C $build fuzzers
2018-01-14 03:51:07 +03:00
2018-07-07 18:43:40 +03:00
# The seed corpus is a separate flat archive for each fuzzer,
# with a fixed name ${fuzzer}_seed_corpus.zip.
for d in " $( dirname " $0 " ) /../test/fuzz/fuzz- " *; do
zip -jqr $OUT /$( basename " $d " ) _seed_corpus.zip " $d "
2018-01-20 03:44:56 +03:00
done
# get fuzz-dns-packet corpus
2018-01-16 16:36:56 +03:00
df = $build /dns-fuzzing
2018-01-14 03:51:07 +03:00
git clone --depth 1 https://github.com/CZ-NIC/dns-fuzzing $df
zip -jqr $OUT /fuzz-dns-packet_seed_corpus.zip $df /packet
2018-08-16 05:06:35 +03:00
install -Dt $OUT /src/shared/ $build /src/shared/libsystemd-shared-*.so
2018-01-14 03:51:07 +03:00
2018-08-01 13:25:26 +03:00
wget -O $OUT /fuzz-json_seed_corpus.zip https://storage.googleapis.com/skia-fuzzer/oss-fuzz/skjson_seed_corpus.zip
wget -O $OUT /fuzz-json.dict https://raw.githubusercontent.com/rc0r/afl-fuzz/master/dictionaries/json.dict
2018-01-16 16:36:56 +03:00
find $build -maxdepth 1 -type f -executable -name "fuzz-*" -exec mv { } $OUT \;
2018-11-06 21:51:45 +03:00
find src -type f -name "fuzz-*.dict" -exec cp { } $OUT \;
2018-01-16 18:25:43 +03:00
cp src/fuzz/*.options $OUT