From 816248c4d3b9593385e89453b9c3c38ad8425a70 Mon Sep 17 00:00:00 2001 From: Paulo Henriques Date: Fri, 27 Mar 2026 09:30:45 +0000 Subject: [PATCH] fix(large-response-middleware): use Buffer.byteLength for accurate UTF-8 size measurement payload.length counts JavaScript string characters, which undercounts multi-byte UTF-8 content. This caused the middleware to underestimate response sizes and miss the error threshold, allowing oversized payloads through to the Lambda runtime which then rejected them with a 413. Co-Authored-By: Claude Sonnet 4.6 --- packages/large-response-middleware/src/index.ts | 2 +- packages/large-response-middleware/tsconfig.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/large-response-middleware/src/index.ts b/packages/large-response-middleware/src/index.ts index efc3f16..c0242d6 100644 --- a/packages/large-response-middleware/src/index.ts +++ b/packages/large-response-middleware/src/index.ts @@ -60,7 +60,7 @@ export const withLargeResponseHandler = ({ : ''; const payload = (handlerRequestContext?.response?.body ?? '') + responseHeadersString; - const aproxContentLengthBytes = payload.length * 1.0; + const aproxContentLengthBytes = Buffer.byteLength(payload, 'utf8'); const contentLengthMB = aproxContentLengthBytes > 0 ? aproxContentLengthBytes / TO_MB_FACTOR : 0.0; const sizeLimitInMB = (_sizeLimitInMB ?? LIMIT_REQUEST_SIZE_MB) * 1.0; const thresholdWarnInMB = (thresholdWarn ?? 0.0) * 1.0 * sizeLimitInMB; diff --git a/packages/large-response-middleware/tsconfig.json b/packages/large-response-middleware/tsconfig.json index 74e6b1c..d612497 100644 --- a/packages/large-response-middleware/tsconfig.json +++ b/packages/large-response-middleware/tsconfig.json @@ -6,7 +6,7 @@ "moduleResolution": "node", "lib": ["ESNext"], "sourceMap": true, - "types": ["vitest/globals"], + "types": ["vitest/globals", "node"], "strict": true, "strictFunctionTypes": true, "noImplicitReturns": true,