12345678910111213141516171819202122232425262728293031323334353637 |
- # shellcheck shell=bash
- set -euo pipefail
- python3 -m pip install .
- # Directory to look in for dictionaries, options files, and seed corpora:
- SEED_DATA_DIR="$SRC/seed_data"
- find "$SEED_DATA_DIR" \( -name '*_seed_corpus.zip' -o -name '*.options' -o -name '*.dict' \) \
- ! \( -name '__base.*' \) -exec printf 'Copying: %s\n' {} \; \
- -exec chmod a-x {} \; \
- -exec cp {} "$OUT" \;
- # Build fuzzers in $OUT.
- find "$SRC/dulwich/fuzzing" -name 'fuzz_*.py' -print0 | while IFS= read -r -d '' fuzz_harness; do
- compile_python_fuzzer "$fuzz_harness"
- common_base_dictionary_filename="$SEED_DATA_DIR/__base.dict"
- if [[ -r "$common_base_dictionary_filename" ]]; then
- # Strip the `.py` extension from the filename and replace it with `.dict`.
- fuzz_harness_dictionary_filename="$(basename "$fuzz_harness" .py).dict"
- output_file="$OUT/$fuzz_harness_dictionary_filename"
- printf 'Appending %s to %s\n' "$common_base_dictionary_filename" "$output_file"
- if [[ -s "$output_file" ]]; then
- # If a dictionary file for this fuzzer already exists and is not empty,
- # we append a new line to the end of it before appending any new entries.
- #
- # LibFuzzer will happily ignore multiple empty lines in a dictionary but fail with an error
- # if any single line has incorrect syntax (e.g., if we accidentally add two entries to the same line.)
- # See docs for valid syntax: https://llvm.org/docs/LibFuzzer.html#id32
- echo >>"$output_file"
- fi
- cat "$common_base_dictionary_filename" >>"$output_file"
- fi
- done
|