You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.5 KiB
71 lines
2.5 KiB
#!/bin/bash
|
|
#
|
|
# Minimizer script for manual test case minimization.
|
|
#
|
|
# Usage:
|
|
#
|
|
# This script can be used to minimize a dumped reproducer. For instance, if you
|
|
# ran the fuzz test from the codelab like this:
|
|
#
|
|
# FUZZTEST_REPRODUCERS_OUT_DIR=/tmp/reproducers \
|
|
# bazel run --config=fuzztest :escaping_test \
|
|
# -- --fuzz=UnescapingAStringNeverTriggersUndefinedBehavior
|
|
#
|
|
# Then when a crash is found, the crashing input is saved to a file and you
|
|
# will see something like this on the terminal:
|
|
#
|
|
# [*] Reproducer file written to: /tmp/reproducers/r3pr0dUc3r
|
|
#
|
|
# In order to minimize this reproducer input file, run:
|
|
#
|
|
# FUZZTEST_MINIMIZE_REPRODUCER=/tmp/reproducers/r3pr0dUc3r \
|
|
# bazel run --config=fuzztest :escaping_test \
|
|
# --run_under=@com_google_fuzztest//tools:minimizer \
|
|
# -- --fuzz=UnescapingAStringNeverTriggersUndefinedBehavior
|
|
#
|
|
# This will try to find smaller and smaller inputs until you manually stop the
|
|
# process with Ctrl-C. When you do, you'll get a message like:
|
|
#
|
|
# Find the smallest reproducer at:
|
|
#
|
|
# /tmp/reproducers/r3pr0dUc3r-min-0008
|
|
|
|
set -u
|
|
|
|
readonly ORIGINAL_REPRODUCER="${FUZZTEST_MINIMIZE_REPRODUCER}"
|
|
|
|
for i in {0001..9999}; do
|
|
echo
|
|
echo "╔════════════════════════════════════════════════╗"
|
|
echo "║ Minimization round: ${i} ║"
|
|
echo "╚════════════════════════════════════════════════╝"
|
|
echo
|
|
|
|
TEMP_DIR=$(mktemp -d)
|
|
|
|
FUZZTEST_REPRODUCERS_OUT_DIR="${TEMP_DIR}" \
|
|
FUZZTEST_MINIMIZE_REPRODUCER="${FUZZTEST_MINIMIZE_REPRODUCER}" \
|
|
"$@" \
|
|
--nosymbolize_stacktrace
|
|
|
|
if [ $? -eq 130 ]; then
|
|
echo
|
|
echo "╔═══════════════════════════════════════════════╗"
|
|
echo "║ Minimization terminated. ║"
|
|
echo "╚═══════════════════════════════════════════════╝"
|
|
echo
|
|
echo "Find the smallest reproducer at:"
|
|
echo
|
|
echo "${FUZZTEST_MINIMIZE_REPRODUCER}"
|
|
|
|
rm -rf "${TEMP_DIR}"
|
|
break
|
|
fi
|
|
|
|
SMALLER_REPRODUCER=$(find "${TEMP_DIR}" -type f)
|
|
NEW_NAME="${ORIGINAL_REPRODUCER}-min-${i}"
|
|
mv "${SMALLER_REPRODUCER}" "${NEW_NAME}"
|
|
FUZZTEST_MINIMIZE_REPRODUCER="${NEW_NAME}"
|
|
|
|
rm -rf "${TEMP_DIR}"
|
|
done
|
|
|