From b5118f65a202f7625ee5d5fdc376f59c5cc8a872 Mon Sep 17 00:00:00 2001 From: keitosuwahara Date: Sun, 13 Jul 2025 22:57:28 +0900 Subject: [PATCH] Prevention of Hijack() runtime panics --- response_writer.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/response_writer.go b/response_writer.go index 753a0b09..ab2f5fec 100644 --- a/response_writer.go +++ b/response_writer.go @@ -6,6 +6,7 @@ package gin import ( "bufio" + "errors" "io" "net" "net/http" @@ -16,6 +17,8 @@ const ( defaultStatus = http.StatusOK ) +var errHijackAlreadyWritten = errors.New("gin: response already written") + // ResponseWriter ... type ResponseWriter interface { http.ResponseWriter @@ -106,6 +109,9 @@ func (w *responseWriter) Written() bool { // Hijack implements the http.Hijacker interface. func (w *responseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { + if w.Written() { + return nil, nil, errHijackAlreadyWritten + } if w.size < 0 { w.size = 0 }