mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-14 20:22:20 +08:00
fix: suppress http.ErrAbortHandler in recover
This commit is contained in:
parent
077a2f39c8
commit
4330ea04c0
@ -68,6 +68,12 @@ func CustomRecoveryWithWriter(out io.Writer, handle RecoveryFunc) HandlerFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if e, ok := err.(error); ok {
|
||||||
|
// ErrAbortHandler should be treated as broken pipe too.
|
||||||
|
if errors.Is(e, http.ErrAbortHandler) {
|
||||||
|
brokenPipe = true
|
||||||
|
}
|
||||||
|
}
|
||||||
if logger != nil {
|
if logger != nil {
|
||||||
const stackSkip = 3
|
const stackSkip = 3
|
||||||
if brokenPipe {
|
if brokenPipe {
|
||||||
|
@ -142,6 +142,28 @@ func TestPanicWithBrokenPipe(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestPanicWithAbortHandler asserts that recovery handles http.ErrAbortHandler as broken pipe
|
||||||
|
func TestPanicWithAbortHandler(t *testing.T) {
|
||||||
|
const expectCode = 204
|
||||||
|
|
||||||
|
var buf strings.Builder
|
||||||
|
router := New()
|
||||||
|
router.Use(RecoveryWithWriter(&buf))
|
||||||
|
router.GET("/recovery", func(c *Context) {
|
||||||
|
// Start writing response
|
||||||
|
c.Header("X-Test", "Value")
|
||||||
|
c.Status(expectCode)
|
||||||
|
|
||||||
|
// Panic with ErrAbortHandler which should be treated as broken pipe
|
||||||
|
panic(http.ErrAbortHandler)
|
||||||
|
})
|
||||||
|
// RUN
|
||||||
|
w := PerformRequest(router, http.MethodGet, "/recovery")
|
||||||
|
// TEST
|
||||||
|
assert.Equal(t, expectCode, w.Code)
|
||||||
|
assert.Contains(t, buf.String(), "net/http: abort Handler")
|
||||||
|
}
|
||||||
|
|
||||||
func TestCustomRecoveryWithWriter(t *testing.T) {
|
func TestCustomRecoveryWithWriter(t *testing.T) {
|
||||||
errBuffer := new(strings.Builder)
|
errBuffer := new(strings.Builder)
|
||||||
buffer := new(strings.Builder)
|
buffer := new(strings.Builder)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user