The infinite loops in the HS parser are in transpiled native OCaml code, not in the VM or CEK step loop. Neither step counters (in cek_step_loop, cek_step, trampoline) nor VM instruction checks caught them because the loops are in direct OCaml recursion. Fix: SIGALRM handler raises Eval_error to break out of native loops. Also sets step_limit flag to catch VM loops. Combined approach handles both native OCaml recursion (alarm+raise) and VM bytecode (step check). The alarm+raise can become unreliable after ~13 timeouts in a single process, but handles the common case well. Reverts the fork-based approach which lost inter-test state. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
104 KiB
104 KiB