mirror of https://github.com/gin-gonic/gin.git
fix(context): check handler is nil (#3413)
* fixed #3404 2022-11-23 * up 2022-11-23 * refactor: refactor context handling and nil checks - Refactor nil checks to improve readability in `context.go` - Modify the control flow in `HandlerNames` and `Next` methods to continue on nil values before appending or invoking handlers in `context.go` Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com> * test: refactor context_test.go for clarity and efficiency - Insert a `nil` value into the `HandlersChain` array in `context_test.go` - Remove empty test functions in `context_test.go` Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com> --------- Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com> Co-authored-by: Bo-Yi Wu <appleboy.tw@gmail.com>
This commit is contained in:
parent
3f5b0afa2a
commit
36b0dede4b
|
@ -152,6 +152,9 @@ func (c *Context) HandlerName() string {
|
|||
func (c *Context) HandlerNames() []string {
|
||||
hn := make([]string, 0, len(c.handlers))
|
||||
for _, val := range c.handlers {
|
||||
if val == nil {
|
||||
continue
|
||||
}
|
||||
hn = append(hn, nameOfFunction(val))
|
||||
}
|
||||
return hn
|
||||
|
@ -182,6 +185,9 @@ func (c *Context) FullPath() string {
|
|||
func (c *Context) Next() {
|
||||
c.index++
|
||||
for c.index < int8(len(c.handlers)) {
|
||||
if c.handlers[c.index] == nil {
|
||||
continue
|
||||
}
|
||||
c.handlers[c.index](c)
|
||||
c.index++
|
||||
}
|
||||
|
|
|
@ -362,7 +362,7 @@ func TestContextHandlerName(t *testing.T) {
|
|||
|
||||
func TestContextHandlerNames(t *testing.T) {
|
||||
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||
c.handlers = HandlersChain{func(c *Context) {}, handlerNameTest, func(c *Context) {}, handlerNameTest2}
|
||||
c.handlers = HandlersChain{func(c *Context) {}, nil, handlerNameTest, func(c *Context) {}, handlerNameTest2}
|
||||
|
||||
names := c.HandlerNames()
|
||||
|
||||
|
@ -1671,7 +1671,6 @@ func TestContextBindWithXML(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestContextBindPlain(t *testing.T) {
|
||||
|
||||
// string
|
||||
w := httptest.NewRecorder()
|
||||
c, _ := CreateTestContext(w)
|
||||
|
@ -1863,7 +1862,6 @@ func TestContextShouldBindPlain(t *testing.T) {
|
|||
assert.NoError(t, c.ShouldBindPlain(&bs))
|
||||
assert.Equal(t, []byte("test []byte"), bs)
|
||||
assert.Equal(t, 0, w.Body.Len())
|
||||
|
||||
}
|
||||
|
||||
func TestContextShouldBindHeader(t *testing.T) {
|
||||
|
@ -2371,6 +2369,7 @@ func TestContextShouldBindBodyWithPlain(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestContextGolangContext(t *testing.T) {
|
||||
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||
c.Request, _ = http.NewRequest("POST", "/", bytes.NewBufferString("{\"foo\":\"bar\", \"bar\":\"foo\"}"))
|
||||
|
|
Loading…
Reference in New Issue