fix(gin): Do not panic when handling method not allowed on empty tree (#4003)
Signed-off-by: Pierre-Henri Symoneaux <pierre-henri.symoneaux@ovhcloud.com>
This commit is contained in:
parent
9c081de9cd
commit
626d55b0c0
2
gin.go
2
gin.go
@ -687,7 +687,7 @@ func (engine *Engine) handleHTTPRequest(c *Context) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
if engine.HandleMethodNotAllowed {
|
if engine.HandleMethodNotAllowed && len(t) > 0 {
|
||||||
// According to RFC 7231 section 6.5.5, MUST generate an Allow header field in response
|
// According to RFC 7231 section 6.5.5, MUST generate an Allow header field in response
|
||||||
// containing a list of the target resource's currently supported methods.
|
// containing a list of the target resource's currently supported methods.
|
||||||
allowed := make([]string, 0, len(t)-1)
|
allowed := make([]string, 0, len(t)-1)
|
||||||
|
11
gin_test.go
11
gin_test.go
@ -754,3 +754,14 @@ func TestCustomUnmarshalStruct(t *testing.T) {
|
|||||||
assert.Equal(t, 200, w.Code)
|
assert.Equal(t, 200, w.Code)
|
||||||
assert.Equal(t, `"2000/01/01"`, w.Body.String())
|
assert.Equal(t, `"2000/01/01"`, w.Body.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test the fix for https://github.com/gin-gonic/gin/issues/4002
|
||||||
|
func TestMethodNotAllowedNoRoute(t *testing.T) {
|
||||||
|
g := New()
|
||||||
|
g.HandleMethodNotAllowed = true
|
||||||
|
|
||||||
|
req := httptest.NewRequest("GET", "/", nil)
|
||||||
|
resp := httptest.NewRecorder()
|
||||||
|
assert.NotPanics(t, func() { g.ServeHTTP(resp, req) })
|
||||||
|
assert.Equal(t, http.StatusNotFound, resp.Code)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user