| #!/bin/bash -eu |
| # |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| # |
| ################################################################################ |
| |
| # List of targets disabled for oss-fuzz. |
| declare -A disabled=([pkcs8]=1) |
| |
| # List of targets we want to fuzz in TLS and non-TLS mode. |
| declare -A tls_targets=([tls-client]=1 [tls-server]=1 [dtls-client]=1 [dtls-server]=1) |
| |
| # Helper function that copies a fuzzer binary and its seed corpus. |
| copy_fuzzer() |
| { |
| local fuzzer=$1 |
| local name=$2 |
| |
| # Copy the binary. |
| cp ../dist/Debug/bin/$fuzzer $OUT/$name |
| |
| # Zip and copy the corpus, if any. |
| if [ -d "$SRC/nss-corpus/$name" ]; then |
| zip $OUT/${name}_seed_corpus.zip $SRC/nss-corpus/$name/* |
| else |
| zip $OUT/${name}_seed_corpus.zip $SRC/nss-corpus/*/* |
| fi |
| } |
| |
| # Copy libFuzzer options |
| cp fuzz/options/*.options $OUT/ |
| |
| # Build the library (non-TLS fuzzing mode). |
| CXX="$CXX -stdlib=libc++" LDFLAGS="$CFLAGS" \ |
| ./build.sh -c -v --fuzz=oss --fuzz --disable-tests |
| |
| # Copy fuzzing targets. |
| for fuzzer in $(find ../dist/Debug/bin -name "nssfuzz-*" -printf "%f\n"); do |
| name=${fuzzer:8} |
| if [ -z "${disabled[$name]:-}" ]; then |
| [ -n "${tls_targets[$name]:-}" ] && name="${name}-no_fuzzer_mode" |
| copy_fuzzer $fuzzer $name |
| fi |
| done |
| |
| # Build the library again (TLS fuzzing mode). |
| CXX="$CXX -stdlib=libc++" LDFLAGS="$CFLAGS" \ |
| ./build.sh -c -v --fuzz=oss --fuzz=tls --disable-tests |
| |
| # Copy dual mode targets in TLS mode. |
| for name in "${!tls_targets[@]}"; do |
| if [ -z "${disabled[$name]:-}" ]; then |
| copy_fuzzer nssfuzz-$name $name |
| fi |
| done |