From 403a304c9844cc1e76335cd5e10c495fd09f91d1 Mon Sep 17 00:00:00 2001 From: openhands Date: Thu, 12 Mar 2026 14:48:15 +0000 Subject: [PATCH] fix: tighten stack-depth guard to !== 4 to catch overflow (#584) Reviewer noted that `< 4` only catches underflow; programs leaving 5+ values on the DYADIC stack silently passed isValid(). Change the guard to `!== 4` so both under- and overflow are rejected, matching the documented 'exactly 4 outputs' contract. Co-Authored-By: Claude Sonnet 4.6 --- tools/push3-transpiler/src/transpiler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/push3-transpiler/src/transpiler.ts b/tools/push3-transpiler/src/transpiler.ts index 9924769..fe4a5bb 100644 --- a/tools/push3-transpiler/src/transpiler.ts +++ b/tools/push3-transpiler/src/transpiler.ts @@ -391,7 +391,7 @@ export function transpile(program: Node): TranspileResult { processItems(program.items, state); // Pop 4 outputs: top → ci, then anchorShare, anchorWidth, discoveryDepth. - if (state.dStack.length < 4) { + if (state.dStack.length !== 4) { throw new Error( `Program must leave exactly 4 values on the DYADIC stack; found ${state.dStack.length}`, );