From 206eed724b425adbe96ccc9f33922a46c458d890 Mon Sep 17 00:00:00 2001 From: Mykhailo Yusko Date: Thu, 5 Sep 2024 15:40:34 +0300 Subject: [PATCH] fix(multipart): don't share MultipartParseOptions._DEFAULT_HANDLERS between instances --- falcon/media/multipart.py | 2 +- tests/test_media_multipart.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/falcon/media/multipart.py b/falcon/media/multipart.py index 17a990265..bb5f160b1 100644 --- a/falcon/media/multipart.py +++ b/falcon/media/multipart.py @@ -610,4 +610,4 @@ def __init__(self) -> None: self.max_body_part_buffer_size = 1024 * 1024 self.max_body_part_count = 64 self.max_body_part_headers_size = 8192 - self.media_handlers = self._DEFAULT_HANDLERS + self.media_handlers = self._DEFAULT_HANDLERS.copy() diff --git a/tests/test_media_multipart.py b/tests/test_media_multipart.py index 31c7bbff8..e8e62e5af 100644 --- a/tests/test_media_multipart.py +++ b/tests/test_media_multipart.py @@ -9,6 +9,7 @@ from falcon import media from falcon import testing from falcon.util import BufferedReader +from falcon.media.multipart import MultipartParseOptions try: import msgpack @@ -849,3 +850,14 @@ async def deserialize_async(self, stream, content_type, content_length): assert resp.status_code == 200 assert resp.json == ['', '0x48'] + + +def test_multipart_parse_options_default_handlers_unique(): + parse_options_one = MultipartParseOptions() + parse_options_two = MultipartParseOptions() + + parse_options_one.media_handlers.pop(falcon.MEDIA_JSON) + + assert id(parse_options_one.media_handlers) != id(parse_options_two.media_handlers) + assert len(parse_options_one.media_handlers) == 1 + assert len(parse_options_two.media_handlers) >= 2