From 821e9ee0069927085a0d25e8898f4cc556fa7de6 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Thu, 19 May 2022 17:30:09 +0200 Subject: [PATCH] interp: recover interpreter internal panics in EvalWithContext --- interp/interp.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/interp/interp.go b/interp/interp.go index 1a5a8bd00..b1d196ac0 100644 --- a/interp/interp.go +++ b/interp/interp.go @@ -19,6 +19,8 @@ import ( "path" "path/filepath" "reflect" + "runtime" + "runtime/debug" "strconv" "strings" "sync" @@ -628,7 +630,14 @@ func (interp *Interpreter) EvalWithContext(ctx context.Context, src string) (ref done := make(chan struct{}) go func() { - defer close(done) + defer func() { + if r := recover(); r != nil { + var pc [64]uintptr + n := runtime.Callers(1, pc[:]) + err = Panic{Value: r, Callers: pc[:n], Stack: debug.Stack()} + } + close(done) + }() v, err = interp.Eval(src) }()