Skip to content

Commit 0ac87e1

Browse files
authored
Merge pull request #1996 from roidelapluie/roidelapluie/remote-write-io-limiter
2 parents f695195 + 0b88ca2 commit 0ac87e1

1 file changed

Lines changed: 6 additions & 11 deletions

File tree

exp/api/remote/remote_api.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -458,12 +458,6 @@ const maxDecodedSize = 32 * 1024 * 1024
458458
// If the request body is not snappy-encoded, it returns an error.
459459
// Used by default in NewHandler.
460460
func SnappyDecodeMiddleware(logger *slog.Logger) func(http.Handler) http.Handler {
461-
bufPool := sync.Pool{
462-
New: func() any {
463-
return bytes.NewBuffer(nil)
464-
},
465-
}
466-
467461
return func(next http.Handler) http.Handler {
468462
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
469463
enc := r.Header.Get("Content-Encoding")
@@ -474,16 +468,17 @@ func SnappyDecodeMiddleware(logger *slog.Logger) func(http.Handler) http.Handler
474468
return
475469
}
476470

477-
buf := bufPool.Get().(*bytes.Buffer)
478-
buf.Reset()
479-
defer bufPool.Put(buf)
480-
481-
bodyBytes, err := io.ReadAll(io.TeeReader(r.Body, buf))
471+
bodyBytes, err := io.ReadAll(io.LimitReader(r.Body, maxDecodedSize+1))
482472
if err != nil {
483473
logger.Error("Error reading request body", "err", err)
484474
http.Error(w, err.Error(), http.StatusBadRequest)
485475
return
486476
}
477+
if int64(len(bodyBytes)) > maxDecodedSize {
478+
logger.Error("Request body exceeds the limit", "limitBytes", maxDecodedSize)
479+
http.Error(w, fmt.Sprintf("request body exceeds the %v bytes limit", maxDecodedSize), http.StatusRequestEntityTooLarge)
480+
return
481+
}
487482

488483
decodedSize, err := snappy.DecodedLen(bodyBytes)
489484
if err != nil {

0 commit comments

Comments
 (0)