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
Fix frame-stack corruption returning a predicate-bearing named return type
retSlowPath held a raw pointer into ctx.vs.frames[fi] across the call
to enforceFuncReturnTypes. For a function whose declared return type
is a predicate-bearing named type, that call reenters the VM to run
the predicate as a nested call, which reuses (and overwrites) the
same frames[] slot once frame_top no longer counts it — so the outer
code's later reads of frame.base/frame.ret_ip picked up the nested
call's frame instead of its own, desyncing frame_top and aborting with
a fatal VM integrity error on the following ret.
Fixed by capturing frame.base/frame.ret_ip/frame.has_typed_returns
into locals before frame_top is dropped, matching the pattern the
adjacent multi-named-return spread path already used.
Fixes#212
0 commit comments