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
{{ message }}
Repository navigation
Mechanical guard: no call entry may leave a param slot unbound (hazard class behind #1661) #1666
From the Opus 4.8 blind review of #1664, which PASSED. That PR closes the #1661 use-after-free at five call entries one by one, but it leaves the hazard CLASS open:
env_new does not scrub recycled freelist slots;
the JIT's OP_GET_LOCAL stays unchecked.
A future sixth call entry added without the null-fill would reopen the same use-after-free, and nothing mechanical would catch it. A runtime bounds check in the JIT is NOT the fix: GET_LOCAL is the hottest op (a call-heavy forced-JIT loop measured 477M Ir), and the check duplicates a structural invariant. Harden the invariant instead.
Done when
A debug/ASan-build assertion at every frame push checks that every slot below local_count is bound (or null-filled), OR a source gate over env_new(... closure) / call-entry sites refuses one that does not null-fill. Either needs a planted sixth entry that turns it red.
Activity