From 2d74589b98d3f7db16c721b22e1ee2e16afe17b2 Mon Sep 17 00:00:00 2001 From: reza Date: Mon, 7 Aug 2023 13:59:27 +0100 Subject: [PATCH] fix panic when both handler and middlewares are nil --- echo.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/echo.go b/echo.go index 22a5b7af9..929411ca5 100644 --- a/echo.go +++ b/echo.go @@ -575,7 +575,9 @@ func (e *Echo) File(path, file string, m ...MiddlewareFunc) *Route { func (e *Echo) add(host, method, path string, handler HandlerFunc, middlewares ...MiddlewareFunc) *Route { router := e.findRouter(host) - //FIXME: when handler+middleware are both nil ... make it behave like handler removal + if !e.hasValidHandlerAndMiddleware(handler, middlewares...) { + return nil + } name := handlerName(handler) route := router.add(method, path, name, func(c Context) error { h := applyMiddleware(handler, middlewares...) @@ -972,6 +974,18 @@ func handlerName(h HandlerFunc) string { return t.String() } +func (e *Echo) hasValidHandlerAndMiddleware(handler HandlerFunc, middlewares ...MiddlewareFunc) bool { + if handler == nil { + for _, middleware := range middlewares { + if middleware != nil { + return true + } + } + return false + } + return true +} + // // PathUnescape is wraps `url.PathUnescape` // func PathUnescape(s string) (string, error) { // return url.PathUnescape(s)