Skip to content

Commit eace762

Browse files
committed
fix:Ensure we drain the request data stream completely, even if we realize it is too large
This is a workaround to dart-lang/sdk#60271
1 parent a6a3881 commit eace762

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

packages/serverpod/lib/src/server/server.dart

+7-4
Original file line numberDiff line numberDiff line change
@@ -428,15 +428,18 @@ class Server {
428428
}
429429

430430
Future<String> _readBody(HttpRequest request) async {
431-
var builder = BytesBuilder();
431+
var builder = BytesBuilder(copy: false);
432432
var len = 0;
433+
var tooLarge = false;
433434
await for (var segment in request) {
434435
len += segment.length;
435-
if (len > serverpod.config.maxRequestSize) {
436-
throw _RequestTooLargeException(serverpod.config.maxRequestSize);
437-
}
436+
if (tooLarge) continue; // ensure we drain the request stream regardless
437+
if (len > serverpod.config.maxRequestSize) tooLarge = true;
438438
builder.add(segment);
439439
}
440+
if (tooLarge) {
441+
throw _RequestTooLargeException(serverpod.config.maxRequestSize);
442+
}
440443
return const Utf8Decoder().convert(builder.toBytes());
441444
}
442445

0 commit comments

Comments
 (0)