blob: 36256e42de8456b25ba7dc7de763aebdf0657bb6 [file] [log] [blame]
#!/bin/bash
# Copyright 2026 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
set -e
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
FUZZER_URL="fuchsia-pkg://fuchsia.com/f2fs_reader-fuzzers#meta/f2fs_reader_fuzzer_component.cm"
echo "==== Enabling fuzzing ===="
ffx config set fuzzing true
echo "==== Building the fuzzer ===="
fx build //src/storage/f2fs_reader/fuzzers:f2fs_reader-fuzzers_package
echo "==== Resolving latest package ===="
ffx component resolve "$FUZZER_URL" || true
CORPUS_DIR=$(mktemp -d)
trap 'rm -rf "$CORPUS_DIR"' EXIT
echo "==== Creating empty test image for seed corpus ===="
touch "$CORPUS_DIR/empty_seed"
echo "==== Ensuring clean fuzzer state ===="
ffx fuzz stop "$FUZZER_URL" || true
OUT_DIR=/tmp/fuzzer_output
mkdir -p "${OUT_DIR}"
echo "==== Setting fuzzer max_input_size ==="
ffx fuzz set "$FUZZER_URL" max_input_size 1mb --output "${OUT_DIR}"
echo "==== Adding seed corpus ===="
ffx fuzz add "$FUZZER_URL" "$CORPUS_DIR" --seed --output "${OUT_DIR}"
echo "==== Configuring fuzzer for verbose output ===="
ffx fuzz set "$FUZZER_URL" debug true --output "${OUT_DIR}"
ffx fuzz set "$FUZZER_URL" purge_interval 3600s --output "${OUT_DIR}"
ffx fuzz set "$FUZZER_URL" asan_options "allocator_release_to_os_interval_ms=-1" --output "${OUT_DIR}"
DURATION=${1:-3600}
echo "==== Starting guided fuzzing (Duration: ${DURATION} seconds) ===="
echo "Note: To stop earlier, press Ctrl-C."
ffx fuzz run "$FUZZER_URL" --time "$DURATION"
echo "==== Fuzzing session completed ===="