From 5ca6ae06ecbc89eeb52efe72932133032663e5ca Mon Sep 17 00:00:00 2001 From: Carlos Sousa Date: Fri, 6 Jun 2025 21:00:12 -0300 Subject: [PATCH] feat: add support for max content length --- src/socketify/native.py | 1 + src/socketify/socketify.py | 13 ++----------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/socketify/native.py b/src/socketify/native.py index c80d09a..15c9d6f 100644 --- a/src/socketify/native.py +++ b/src/socketify/native.py @@ -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_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_set_max_content_length(uws_app_t *app, size_t maxContentLength); 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); diff --git a/src/socketify/socketify.py b/src/socketify/socketify.py index c39587e..c7d1a2c 100644 --- a/src/socketify/socketify.py +++ b/src/socketify/socketify.py @@ -1001,8 +1001,6 @@ def uws_generic_method_handler(res, req, user_data): response = AppResponse(res, app) request = AppRequest(req, app) - response._content_length = int(request.get_header("content-length")) - try: if inspect.iscoroutinefunction(handler): response.grab_aborted_handler() @@ -1484,7 +1482,6 @@ class AppResponse: self._chunkFuture = None self._dataFuture = None self._data = None - self._content_length = None def cork(self, callback): self.app.loop.is_idle = False @@ -2038,11 +2035,6 @@ class AppResponse: return self 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 hasattr(handler, "__call__"): self._data_handler = handler @@ -2626,7 +2618,7 @@ class App: task_factory_max_items=100_000, lifespan=True, idle_relaxation_time=0.01, - max_content_length=None, + max_content_length=0, ): socket_options_ptr = ffi.new("struct us_socket_context_options_t *") @@ -2634,7 +2626,6 @@ class App: self._options = options self._template = None self.lifespan = lifespan - self.max_content_length = max_content_length # keep socket data alive for CFFI self._socket_refs = {} self._native_options = [] @@ -2698,7 +2689,6 @@ class App: socket_options.ssl_prefer_low_memory_usage = ffi.cast( "int", options.ssl_prefer_low_memory_usage ) - else: self.is_ssl = False self.SSL = ffi.cast("int", 0) @@ -2716,6 +2706,7 @@ class App: self._ptr = ffi.new_handle(self) if bool(lib.uws_constructor_failed(self.SSL, self.app)): raise RuntimeError("Failed to create connection") + lib.uws_set_max_content_length(self.app, max_content_length) self.handlers = [] self.error_handler = None