| #!/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 |