@@ -179,6 +179,8 @@ class FormDataParser:
179
179
:param cls: an optional dict class to use. If this is not specified
180
180
or `None` the default :class:`MultiDict` is used.
181
181
:param silent: If set to False parsing errors will not be caught.
182
+ :param max_form_parts: The maximum number of parts to be parsed. If this is
183
+ exceeded, a :exc:`~exceptions.RequestEntityTooLarge` exception is raised.
182
184
"""
183
185
184
186
def __init__ (
@@ -190,6 +192,8 @@ def __init__(
190
192
max_content_length : t .Optional [int ] = None ,
191
193
cls : t .Optional [t .Type [MultiDict ]] = None ,
192
194
silent : bool = True ,
195
+ * ,
196
+ max_form_parts : t .Optional [int ] = None ,
193
197
) -> None :
194
198
if stream_factory is None :
195
199
stream_factory = default_stream_factory
@@ -199,6 +203,7 @@ def __init__(
199
203
self .errors = errors
200
204
self .max_form_memory_size = max_form_memory_size
201
205
self .max_content_length = max_content_length
206
+ self .max_form_parts = max_form_parts
202
207
203
208
if cls is None :
204
209
cls = MultiDict
@@ -281,6 +286,7 @@ def _parse_multipart(
281
286
self .errors ,
282
287
max_form_memory_size = self .max_form_memory_size ,
283
288
cls = self .cls ,
289
+ max_form_parts = self .max_form_parts ,
284
290
)
285
291
boundary = options .get ("boundary" , "" ).encode ("ascii" )
286
292
@@ -346,10 +352,12 @@ def __init__(
346
352
max_form_memory_size : t .Optional [int ] = None ,
347
353
cls : t .Optional [t .Type [MultiDict ]] = None ,
348
354
buffer_size : int = 64 * 1024 ,
355
+ max_form_parts : t .Optional [int ] = None ,
349
356
) -> None :
350
357
self .charset = charset
351
358
self .errors = errors
352
359
self .max_form_memory_size = max_form_memory_size
360
+ self .max_form_parts = max_form_parts
353
361
354
362
if stream_factory is None :
355
363
stream_factory = default_stream_factory
@@ -409,7 +417,9 @@ def parse(
409
417
[None ],
410
418
)
411
419
412
- parser = MultipartDecoder (boundary , self .max_form_memory_size )
420
+ parser = MultipartDecoder (
421
+ boundary , self .max_form_memory_size , max_parts = self .max_form_parts
422
+ )
413
423
414
424
fields = []
415
425
files = []
0 commit comments