#!/bin/bash
set -u

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
CHROME="${1:-${CHROME:-$SCRIPT_DIR/../../chromium-149.0.7779.3-linux-asan/chrome}}"

if [ ! -x "$CHROME" ]; then
  echo "Usage: $0 /path/to/chromium-149.0.7779.3-linux-asan/chrome"
  exit 1
fi

PORT=$((18100 + RANDOM % 700))
python3 -m http.server "$PORT" -d "$SCRIPT_DIR" &>/dev/null &
SERVER_PID=$!
TMPPROFILE="$(mktemp -d /tmp/chrome_aud_130ee005_XXXXXX)"
OUTFILE="$(mktemp /tmp/asan_output.XXXXXX)"

cleanup() {
  kill "$SERVER_PID" 2>/dev/null || true
  wait "$SERVER_PID" 2>/dev/null || true
  rm -rf "$TMPPROFILE" 2>/dev/null || true
  rm -f "$OUTFILE" 2>/dev/null || true
}
trap cleanup EXIT
sleep 1

ASAN_OPTIONS="detect_odr_violation=0:abort_on_error=1" \
timeout 90 "$CHROME" \
  --headless=new \
  --no-sandbox \
  --disable-dev-shm-usage \
  --single-process \
  --no-zygote \
  --disable-crashpad \
  --disable-crashpad-for-testing \
  --disable-breakpad \
  --disable-crash-reporter \
  --disable-background-networking \
  --no-first-run \
  --no-default-browser-check \
  --metrics-recording-only \
  --disable-features=CrashReporting,Reporting \
  --force-renderer-accessibility \
  --user-data-dir="$TMPPROFILE" \
  --virtual-time-budget=10000 \
  "http://127.0.0.1:$PORT/poc.html" &>"$OUTFILE" &
CHROME_PID=$!

while kill -0 "$CHROME_PID" 2>/dev/null; do
  if grep -q "AddressSanitizer" "$OUTFILE" 2>/dev/null; then
    sleep 2
    kill -9 "$CHROME_PID" 2>/dev/null
    wait "$CHROME_PID" 2>/dev/null
    break
  fi
  sleep 1
done
wait "$CHROME_PID" 2>/dev/null

cat "$OUTFILE"
