mirror of
https://github.com/labstack/echo.git
synced 2025-11-29 22:48:07 +02:00
Fixed panic when Router#Find fails on Param paths
Fixed panic when Router#Find fails to find a route that could match a Param route that only have children routes and no root route. e.g /create /:id/edit /:id/active Finding /creates results in panic because the router tree node that belongs to the param route :id don't have pnames on it. The childrens of :id (:id/edit and :id/active) have the pnames properly set, but those are not processed because /creates don't match on those paths.
This commit is contained in:
@@ -1298,6 +1298,40 @@ func TestRouterParam1466(t *testing.T) {
|
||||
assert.Equal(t, 0, c.response.Status)
|
||||
}
|
||||
|
||||
// Issue #1653
|
||||
func TestRouterPanicWhenParamNoRootOnlyChildsFailsFind(t *testing.T) {
|
||||
e := New()
|
||||
r := e.router
|
||||
|
||||
r.Add(http.MethodGet, "/users/create", handlerHelper("create", 1))
|
||||
r.Add(http.MethodGet, "/users/:id/edit", func(c Context) error {
|
||||
return nil
|
||||
})
|
||||
r.Add(http.MethodGet, "/users/:id/active", func(c Context) error {
|
||||
return nil
|
||||
})
|
||||
|
||||
c := e.NewContext(nil, nil).(*context)
|
||||
r.Find(http.MethodGet, "/users/alice/edit", c)
|
||||
assert.Equal(t, "alice", c.Param("id"))
|
||||
|
||||
c = e.NewContext(nil, nil).(*context)
|
||||
r.Find(http.MethodGet, "/users/bob/active", c)
|
||||
assert.Equal(t, "bob", c.Param("id"))
|
||||
|
||||
c = e.NewContext(nil, nil).(*context)
|
||||
r.Find(http.MethodGet, "/users/create", c)
|
||||
c.Handler()(c)
|
||||
assert.Equal(t, 1, c.Get("create"))
|
||||
assert.Equal(t, "/users/create", c.Get("path"))
|
||||
|
||||
//This panic before the fix for Issue #1653
|
||||
c = e.NewContext(nil, nil).(*context)
|
||||
r.Find(http.MethodGet, "/users/createNotFound", c)
|
||||
he := c.Handler()(c).(*HTTPError)
|
||||
assert.Equal(t, http.StatusNotFound, he.Code)
|
||||
}
|
||||
|
||||
func benchmarkRouterRoutes(b *testing.B, routes []*Route) {
|
||||
e := New()
|
||||
r := e.router
|
||||
|
||||
Reference in New Issue
Block a user