From 63178b565458277cfa18c77e3a99929e9d2cc5b5 Mon Sep 17 00:00:00 2001 From: zeripath Date: Tue, 24 Aug 2021 00:50:04 +0100 Subject: [PATCH] Ensure that template compilation panics are sent to the logs (#16788) (#16792) Backport #16788 Although panics within the rendering pipeline are caught and dealt with, panics that occur before that starts are unprotected and will kill Gitea without being sent to the logs. This PR adds a basic recovery handler to catch panics that occur after the logger is initialised and ensure that they're sent to the logger. Signed-off-by: Andrew Thornton Co-authored-by: techknowlogick --- cmd/web.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmd/web.go b/cmd/web.go index 6953e7c64f..963c816207 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -86,6 +86,11 @@ func runWeb(ctx *cli.Context) error { _ = log.DelLogger("console") log.NewLogger(0, "console", "console", fmt.Sprintf(`{"level": "fatal", "colorize": %t, "stacktraceLevel": "none"}`, log.CanColorStdout)) } + defer func() { + if panicked := recover(); panicked != nil { + log.Fatal("PANIC: %v\n%s", panicked, string(log.Stack(2))) + } + }() managerCtx, cancel := context.WithCancel(context.Background()) graceful.InitManager(managerCtx)