From a7666f0e7d8f15845b70430e0a86592199b09a75 Mon Sep 17 00:00:00 2001 From: Mikael Ganehag Brorsson <mikael.brorsson@gmail.com> Date: Sun, 14 Nov 2021 00:10:47 +0100 Subject: [PATCH] Handle panics by deferring recover as an error (#345) * Handle panics by deferring recover as an error * Check for type in recover handler --- script.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/script.go b/script.go index 73dde31..82b02f5 100644 --- a/script.go +++ b/script.go @@ -219,6 +219,18 @@ func (c *Compiled) RunContext(ctx context.Context) (err error) { v := NewVM(c.bytecode, c.globals, c.maxAllocs) ch := make(chan error, 1) go func() { + defer func() { + if r := recover(); r != nil { + switch e := r.(type) { + case string: + ch <- fmt.Errorf(e) + case error: + ch <- e + default: + ch <- fmt.Errorf("unknown panic: %v", e) + } + } + }() ch <- v.Run() }()