mirror of
https://github.com/projectdiscovery/nuclei
synced 2026-06-08 16:50:47 +00:00
fa73d2e13e
Prevent pooled and non-pooled goja runtimes from being reused or cleaned up when the `RunProgram` goroutine fails to exit after context cancellation and `Interrupt()`. In that state, the goroutine may still be mutating runtime state, so touching the runtime/returning it to the pool can cause fatal concurrent map access panics. Add an explicit `errRuntimeTerminationTimeout` path that abandons the runtime, keeps the related concurrency slot reserved, and releases that slot only from a reaper after the orphaned goroutine exits. Preserve `errors.Is` compatibility with the original context cancellation cause. Keep normal cleanup behavior unchanged, including callback panic cleanup, and add regression tests for stuck-interrupt handling that verify runtime abandonment and delayed slot release. Fixes #7376 * fix race condition * fixing review comments * fix(js): defer runtime cleanup When a runtime is abandoned, we must not touch the goja runtime after `RunProgram` has exceeded the interrupt grace period. At the same time, cleanup still needs to run on every normal exit before returning the runtime to the pool, including setup callback panics. Signed-off-by: Dwi Siswanto <git@dw1.io> --------- Signed-off-by: Dwi Siswanto <git@dw1.io> Co-authored-by: Dwi Siswanto <git@dw1.io>