From 48fa6245cc44378ec8066af615ba7b20fd35a9cf Mon Sep 17 00:00:00 2001 From: Voltboy Date: Wed, 28 Apr 2021 17:45:48 +0300 Subject: [PATCH] restore originalWriter in case of panic inside echoHandlerFuncWrapper.ServeHTTP method --- middleware/timeout.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/middleware/timeout.go b/middleware/timeout.go index d56e463b0..fb8ae4219 100644 --- a/middleware/timeout.go +++ b/middleware/timeout.go @@ -92,6 +92,15 @@ func (t echoHandlerFuncWrapper) ServeHTTP(rw http.ResponseWriter, r *http.Reques originalWriter := t.ctx.Response().Writer t.ctx.Response().Writer = rw + // in case of panic we restore original writer and call panic again + // so it could be handled with global middleware Recover() + defer func() { + if err := recover(); err != nil { + t.ctx.Response().Writer = originalWriter + panic(err) + } + }() + err := t.handler(t.ctx) if ctxErr := r.Context().Err(); ctxErr == context.DeadlineExceeded { if err != nil && t.errHandler != nil {