From 80df01192337181cb4a6bf2bd6d482c58da5c92c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Sun, 19 Jan 2025 15:49:04 +0100 Subject: [PATCH] fix: Prevent multiple calls to `WriteHeader` on the same response writer --- internal/api/middleware.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/api/middleware.go b/internal/api/middleware.go index ec5480a..c28b15c 100644 --- a/internal/api/middleware.go +++ b/internal/api/middleware.go @@ -152,14 +152,21 @@ type wrappedResponseWriter struct { http.ResponseWriter statusCode int bytesWritten int + wroteHeader bool // prevent metrics middleware (using httpsnoop) from calling WriteHeader multiple times on the same response writer } func (rw *wrappedResponseWriter) WriteHeader(statusCode int) { - rw.ResponseWriter.WriteHeader(statusCode) - rw.statusCode = statusCode + if !rw.wroteHeader { + rw.statusCode = statusCode + rw.ResponseWriter.WriteHeader(statusCode) + rw.wroteHeader = true + } } func (rw *wrappedResponseWriter) Write(b []byte) (int, error) { + if !rw.wroteHeader { + rw.WriteHeader(http.StatusOK) + } bytes, err := rw.ResponseWriter.Write(b) rw.bytesWritten += bytes return bytes, err