Skip to content

Commit 821e9ee

Browse files
authored
interp: recover interpreter internal panics in EvalWithContext
1 parent 00e3f92 commit 821e9ee

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

interp/interp.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import (
1919
"path"
2020
"path/filepath"
2121
"reflect"
22+
"runtime"
23+
"runtime/debug"
2224
"strconv"
2325
"strings"
2426
"sync"
@@ -628,7 +630,14 @@ func (interp *Interpreter) EvalWithContext(ctx context.Context, src string) (ref
628630

629631
done := make(chan struct{})
630632
go func() {
631-
defer close(done)
633+
defer func() {
634+
if r := recover(); r != nil {
635+
var pc [64]uintptr
636+
n := runtime.Callers(1, pc[:])
637+
err = Panic{Value: r, Callers: pc[:n], Stack: debug.Stack()}
638+
}
639+
close(done)
640+
}()
632641
v, err = interp.Eval(src)
633642
}()
634643

0 commit comments

Comments
 (0)