#!/usr/bin/env bash # Runs every parser fuzz target for the given duration each (default 20s). # FUZZ_PARALLEL limits the number of fuzzing workers; each one keeps a # 100 MB shared-memory file in the temporary directory. # FUZZ_MINIMIZE is the time spent minimising each new input (default 0): # minimisation stalls FuzzInspect for minutes, so short runs skip it; a # failing input is still saved under testdata/fuzz as found. set -euo pipefail duration="${1:-20s}" parallel=(-fuzzminimizetime="${FUZZ_MINIMIZE:-0}") if [[ -n "${FUZZ_PARALLEL:-}" ]]; then parallel+=(-parallel "$FUZZ_PARALLEL") fi targets=( "./codec FuzzDecoder" "./codec FuzzWalk" "./codec FuzzPeek" "./codec FuzzUnmarshal" "./codec FuzzEncodeImpliesWalk" "./extension FuzzDecodeArray" "./profile FuzzDecode" "./datekey FuzzParse" "./agewrap FuzzStanzas" "./accesskey FuzzDecode" "./capsule FuzzParsePrelude" "./capsule FuzzDecodeHeader" "./capsule FuzzDecodeControl" "./capsule FuzzDecodeHead" "./capsule FuzzEvaluateSecurity" "./internal/pathrule FuzzCheckPath" "./locator FuzzUnmarshal" "./locator FuzzParseInfo" "./locator FuzzCheckURI" "./locator FuzzCheckResolvedIP" "./internal/der FuzzDERCheck" "./internal/cms FuzzParseSignature" "./internal/cms FuzzParseToken" "./internal/cms FuzzParseCert" "./capsule FuzzInspect" "./capsule FuzzEncodeImpliesDecode" ) for t in "${targets[@]}"; do read -r pkg name <<<"$t" echo "== $pkg $name ($duration)" go test -run='^$' -fuzz="^${name}\$" -fuzztime="$duration" "${parallel[@]}" "$pkg" done