@@ -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.
460460func 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