From 5b92e30b59443d38931616f2de3e5d05afbfc0d5 Mon Sep 17 00:00:00 2001 From: xfy Date: Wed, 15 Apr 2026 14:20:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(middleware/bodylimit):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=20BodyStream=20nil=20=E6=A3=80=E6=9F=A5=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E7=A9=BA=E6=8C=87=E9=92=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在设置 body stream 限制前检查 stream 是否为 nil, 避免在无请求体的请求上调用 SetBodyStream 导致异常。 Co-Authored-By: Claude Opus 4.6 --- internal/middleware/bodylimit/bodylimit.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/internal/middleware/bodylimit/bodylimit.go b/internal/middleware/bodylimit/bodylimit.go index bf148d8..c8e39fb 100644 --- a/internal/middleware/bodylimit/bodylimit.go +++ b/internal/middleware/bodylimit/bodylimit.go @@ -157,16 +157,19 @@ func (bl *BodyLimit) Process(next fasthttp.RequestHandler) fasthttp.RequestHandl } // 对于 chunked 传输或没有 Content-Length 的请求 - // 设置最大读取限制 - ctx.Request.SetBodyStream(ctx.Request.BodyStream(), int(limit)) + // 只有当 BodyStream 存在时才设置限制 + bodyStream := ctx.Request.BodyStream() + if bodyStream != nil { + ctx.Request.SetBodyStream(bodyStream, int(limit)) - // 包装请求体读取以检测超限 - limitedReader := &limitedBodyReader{ - ctx: ctx, - limit: limit, - original: ctx.Request.BodyStream(), + // 包装请求体读取以检测超限 + limitedReader := &limitedBodyReader{ + ctx: ctx, + limit: limit, + original: bodyStream, + } + ctx.Request.SetBodyStream(limitedReader, -1) } - ctx.Request.SetBodyStream(limitedReader, -1) next(ctx) }