blob: a0273ccf4bc71f53c78eecb0854a276c4e3a7599 [file] [log] [blame]
#!/bin/bash
# This script is used to update corpus.zip and regressions.zip from the
# Google oss-fuzz project. To actually run this requires access rights to the
# nanopb oss-fuzz storage.
#
# The oss-fuzz project uses separate fuzzer test cases for better performance
# with coverage based fuzzers. This script merges the corpus to a single one
# for the combined fuzztest test case.
set -x
set -e
mkdir tmp-corpusupdate
cd tmp-corpusupdate
gsutil cp gs://nanopb-backup.clusterfuzz-external.appspot.com/corpus/libFuzzer/nanopb_fuzztest_proto2_static/latest.zip proto2_static.zip
gsutil cp gs://nanopb-backup.clusterfuzz-external.appspot.com/corpus/libFuzzer/nanopb_fuzztest_proto2_pointer/latest.zip proto2_pointer.zip
gsutil cp gs://nanopb-backup.clusterfuzz-external.appspot.com/corpus/libFuzzer/nanopb_fuzztest_proto3_static/latest.zip proto3_static.zip
gsutil cp gs://nanopb-backup.clusterfuzz-external.appspot.com/corpus/libFuzzer/nanopb_fuzztest_proto3_pointer/latest.zip proto3_pointer.zip
gsutil cp gs://nanopb-backup.clusterfuzz-external.appspot.com/corpus/libFuzzer/nanopb_fuzztest_io_errors/latest.zip io_errors.zip
unzip -nd corpus ../corpus.zip # Unzip old corpus
unzip -nd new_corpus proto2_static.zip
unzip -nd new_corpus proto2_pointer.zip
unzip -nd new_corpus proto3_static.zip
unzip -nd new_corpus proto3_pointer.zip
unzip -nd new_corpus io_errors.zip
# Build fuzztest with libfuzzer to merge corpuses
CCFLAGS="-DLLVMFUZZER -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link"
LINKFLAGS="-std=c++11 -O1 -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link -stdlib=libc++"
LINKLIBS="-fsanitize=fuzzer"
scons -u CC=clang LINK=clang++ \
BUILDDIR=fuzztest/tmp-corpusupdate/build build/fuzztest/fuzztest \
"CCFLAGS=$CCFLAGS" "LINKFLAGS=$LINKFLAGS" "LINKLIBS=$LINKLIBS"
# Copy any files with new features into corpus directory
build/fuzztest/fuzztest corpus new_corpus -merge=1
# Add files to end of the zips. This should work relatively efficiently
# with gits binary diff feature.
(cd corpus; zip -u ../../corpus.zip ./*)
(cd new_corpus/regressions; zip -u ../../regressions.zip *)
cd ..
rm -rf tmp-corpusupdate