feat: add support for max content length

pull/221/head
Carlos Sousa 2025-06-06 21:00:12 -03:00
rodzic e3d47f8339
commit 5ca6ae06ec
2 zmienionych plików z 3 dodań i 11 usunięć

Wyświetl plik

@ -186,6 +186,7 @@ void uws_add_server_name(int ssl, uws_app_t *app, const char *hostname_pattern,
void uws_add_server_name_with_options(int ssl, uws_app_t *app, const char *hostname_pattern, size_t hostname_pattern_length, struct us_socket_context_options_t options); void uws_add_server_name_with_options(int ssl, uws_app_t *app, const char *hostname_pattern, size_t hostname_pattern_length, struct us_socket_context_options_t options);
void uws_missing_server_name(int ssl, uws_app_t *app, uws_missing_server_handler handler, void *user_data); void uws_missing_server_name(int ssl, uws_app_t *app, uws_missing_server_handler handler, void *user_data);
void uws_filter(int ssl, uws_app_t *app, uws_filter_handler handler, void *user_data); void uws_filter(int ssl, uws_app_t *app, uws_filter_handler handler, void *user_data);
void uws_set_max_content_length(uws_app_t *app, size_t maxContentLength);
void uws_res_close(int ssl, uws_res_t *res); void uws_res_close(int ssl, uws_res_t *res);
void uws_res_end(int ssl, uws_res_t *res, const char *data, size_t length, bool close_connection); void uws_res_end(int ssl, uws_res_t *res, const char *data, size_t length, bool close_connection);

Wyświetl plik

@ -1001,8 +1001,6 @@ def uws_generic_method_handler(res, req, user_data):
response = AppResponse(res, app) response = AppResponse(res, app)
request = AppRequest(req, app) request = AppRequest(req, app)
response._content_length = int(request.get_header("content-length"))
try: try:
if inspect.iscoroutinefunction(handler): if inspect.iscoroutinefunction(handler):
response.grab_aborted_handler() response.grab_aborted_handler()
@ -1484,7 +1482,6 @@ class AppResponse:
self._chunkFuture = None self._chunkFuture = None
self._dataFuture = None self._dataFuture = None
self._data = None self._data = None
self._content_length = None
def cork(self, callback): def cork(self, callback):
self.app.loop.is_idle = False self.app.loop.is_idle = False
@ -2038,11 +2035,6 @@ class AppResponse:
return self return self
def on_data(self, handler): def on_data(self, handler):
if self.app.max_content_length is not None and self._content_length is not None:
if self._content_length > self.app.max_content_length:
self.write_status(413).end("413 Request Entity Too Large")
return self
if not self.aborted: if not self.aborted:
if hasattr(handler, "__call__"): if hasattr(handler, "__call__"):
self._data_handler = handler self._data_handler = handler
@ -2626,7 +2618,7 @@ class App:
task_factory_max_items=100_000, task_factory_max_items=100_000,
lifespan=True, lifespan=True,
idle_relaxation_time=0.01, idle_relaxation_time=0.01,
max_content_length=None, max_content_length=0,
): ):
socket_options_ptr = ffi.new("struct us_socket_context_options_t *") socket_options_ptr = ffi.new("struct us_socket_context_options_t *")
@ -2634,7 +2626,6 @@ class App:
self._options = options self._options = options
self._template = None self._template = None
self.lifespan = lifespan self.lifespan = lifespan
self.max_content_length = max_content_length
# keep socket data alive for CFFI # keep socket data alive for CFFI
self._socket_refs = {} self._socket_refs = {}
self._native_options = [] self._native_options = []
@ -2698,7 +2689,6 @@ class App:
socket_options.ssl_prefer_low_memory_usage = ffi.cast( socket_options.ssl_prefer_low_memory_usage = ffi.cast(
"int", options.ssl_prefer_low_memory_usage "int", options.ssl_prefer_low_memory_usage
) )
else: else:
self.is_ssl = False self.is_ssl = False
self.SSL = ffi.cast("int", 0) self.SSL = ffi.cast("int", 0)
@ -2716,6 +2706,7 @@ class App:
self._ptr = ffi.new_handle(self) self._ptr = ffi.new_handle(self)
if bool(lib.uws_constructor_failed(self.SSL, self.app)): if bool(lib.uws_constructor_failed(self.SSL, self.app)):
raise RuntimeError("Failed to create connection") raise RuntimeError("Failed to create connection")
lib.uws_set_max_content_length(self.app, max_content_length)
self.handlers = [] self.handlers = []
self.error_handler = None self.error_handler = None