| 1 | W=/opt/cyclops-v2/oracle/work/llamacpp |
| 2 | BIN="$W/fuzz_deep" |
| 3 | CORP="$W/corpus2" |
| 4 | CRASH="$W/deep/crashes" |
| 5 | SIGS="$W/deep/sigs.txt" |
| 6 | LOG="$W/deep/loop.log" |
| 7 | mkdir -p "$CORP" "$CRASH"; touch "$SIGS" |
| 8 | cp "$W/seeds/"* "$CORP/" 2>/dev/null || true |
| 9 | DEADLINE=$(( $(date +%s) + 21600 )) |
| 10 | |
| 11 | echo "deep_loop start $(date)" > "$LOG" |
| 12 | i=0 |
| 13 | while [ "$(date +%s)" -lt "$DEADLINE" ]; do |
| 14 | i=$((i+1)) |
| 15 | ASAN_OPTIONS=detect_leaks=0:abort_on_error=0:exitcode=77 \ |
| 16 | timeout 660 "$BIN" -max_total_time=600 -rss_limit_mb=4096 -timeout=30 \ |
| 17 | -artifact_prefix="$W/deep/crash-" "$CORP" >> "$LOG" 2>&1 |
| 18 | for c in "$W"/deep/crash-*; do |
| 19 | [ -f "$c" ] || continue |
| 20 | out=$(ASAN_OPTIONS=detect_leaks=0:abort_on_error=0:exitcode=88 timeout 30 "$BIN" "$c" 2>&1) |
| 21 | sig=$(echo "$out" | grep -oE "heap-buffer-overflow|stack-buffer-overflow|global-buffer-overflow|heap-use-after-free|double-free|stack-overflow|division by zero|FPE|out-of-memory|GGML_ASSERT|GGML_ABORT|SEGV on unknown" | head -1) |
| 22 | loc=$(echo "$out" | grep -oE "gguf\.cpp:[0-9]+|ggml[-a-z]*\.c:[0-9]+|ggml\.c:[0-9]+" | head -1) |
| 23 | key="${sig:-unknown}@${loc:-?}" |
| 24 | if grep -qxF "$key" "$SIGS"; then |
| 25 | rm -f "$c" |
| 26 | else |
| 27 | echo "$key" >> "$SIGS" |
| 28 | mv "$c" "$CRASH/$(echo "$key" | tr '/: ' '___')_$(basename "$c")" |
| 29 | echo "NEWCRASH $key $(date)" >> "$LOG" |
| 30 | fi |
| 31 | done |
| 32 | done |
| 33 | echo "deep_loop done $(date)" >> "$LOG" |