From 9b88a15706ae4fd0d3289178627e929c735711c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Youen=20P=C3=A9ron?= Date: Wed, 14 Jun 2023 20:20:31 +0200 Subject: [PATCH] fix: handle panics and recover gracefully when panics occure (#237) * fix: handle panics and recover gracefully when panics occure * docs: Update CHANGELOG.md --------- Co-authored-by: Adrien Aury <44274230+adrienaury@users.noreply.github.com> --- CHANGELOG.md | 1 + wasm/pimo/main.go | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 021f12a1..144292d9 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ Types of changes ## [1.18.1] - `Fixed` local seed parameter should be consistent between different jsonpath +- `Fixed` PIMO Play web assembly version handle panics and recover gracefully when panics occure ## [1.18.0] diff --git a/wasm/pimo/main.go b/wasm/pimo/main.go index 0548d7a6..e034a1dd 100644 --- a/wasm/pimo/main.go +++ b/wasm/pimo/main.go @@ -77,6 +77,15 @@ func main() { reject := args[1] go func() { + // dont't panic + defer func() { + if r := recover(); r != nil { + log.Error().AnErr("panic", r.(error)).Msg("Recovering from panic in play.") + errorObject := errorConstructor.New(r.(error).Error()) + reject.Invoke(errorObject) + } + }() + data, err := play(yaml, data) if err != nil { // err should be an instance of `error`, eg `errors.New("some error")` @@ -100,6 +109,15 @@ func main() { reject := args[1] go func() { + // dont't panic + defer func() { + if r := recover(); r != nil { + log.Error().AnErr("panic", r.(error)).Msg("Recovering from panic in flow") + errorObject := errorConstructor.New(r.(error).Error()) + reject.Invoke(errorObject) + } + }() + pdef, err := model.LoadPipelineDefinitionFromYAML([]byte(yaml)) if err != nil { log.Err(err).Msg("Cannot load pipeline definition")