You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
oom_dedup: never let a dedupe failure abort the session keep/rename
Crashing sessions were sometimes left named session-NNNN instead of being
renamed to their crash signature. Cause (fleet project.log): the OOM keep-policy
raised, aborting deinit before the rename:
deinit -> checkKeepDirectory -> _oom_keep_policy -> Deduper.decide
-> _resolve -> gdb_crash_site -> subprocess.run(text=True)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b ...
--oom-dedup-resolve-segv re-runs source.py under gdb; the fuzzed program prints
binary to stdout (e.g. a gzip/zlib vehicle: 0x1f 0x8b ...), gdb captures it, and
subprocess.run(text=True) utf-8-decodes it -> UnicodeDecodeError. That escaped
decide() and _oom_keep_policy (which only caught OSError), propagating into
deinit so the keep/rename never ran. All 18 tracebacks in the sampled instance
were this; ~19 dirs stuck as session-NNNN.
Fixed in three layers (defense in depth):
- gdb_crash_site: decode gdb output with errors="replace", and also catch
ValueError (UnicodeDecodeError is a ValueError) so the re-run never raises.
- Deduper._resolve: swallow any resolver exception -> empty chain; segv
resolution is best-effort and must never raise into decide().
- _oom_keep_policy: broad except -> (True, None), honoring its documented
"never lose a crash to a dedupe failure" contract (it previously guarded only
the stdout read, not decide()).
Tests: a resolver that raises UnicodeDecodeError no longer breaks decide()
(kept as oomSEGV); the wiring stub gains the .error the real Fuzzer has.
Closes#127
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0 commit comments