sanic/app: When streaming, check REQUEST_MAX_SIZE if length is known

This commit is contained in:
Ozan Caglayan 2023-04-26 00:05:22 +01:00
parent af67801062
commit 2f8628eed3

View File

@ -57,6 +57,7 @@ from sanic.compat import OS_IS_WINDOWS, enable_windows_color_support
from sanic.config import SANIC_PREFIX, Config
from sanic.exceptions import (
BadRequest,
PayloadTooLarge,
SanicException,
ServerError,
URLBuildError,
@ -933,9 +934,11 @@ class Sanic(StaticHandleMixin, BaseSanic, StartupMixin, metaclass=TouchUpMeta):
and request.stream.request_body
and not route.extra.ignore_body
):
if hasattr(handler, "is_stream"):
# Streaming handler: lift the size limit
request.stream.request_max_size = float("inf")
rq_len = request.stream.request_bytes
if rq_len and rq_len > request.stream.request_max_size:
raise PayloadTooLarge("Request body exceeds the size limit")
else:
# Non-streaming handler: preload body
await request.receive_body()