@@ -231,6 +231,53 @@ XMLParser Objects
231
231
.. versionadded :: 3.13
232
232
233
233
234
+ :class: `xmlparser ` objects have the following methods to mitigate some
235
+ well-known XML vulnerabilities.
236
+
237
+ .. method :: xmlparser.SetAllocTrackerMaximumAmplification(max_factor, /)
238
+
239
+ Sets the maximum amplification factor between direct input and bytes
240
+ of dynamic memory allocated.
241
+
242
+ By default, parsers objects have a maximum amplification factor of 100.
243
+
244
+ The amplification factor is calculated as ``allocated / direct ``
245
+ while parsing, where ``direct `` is the number of bytes read from
246
+ the primary document in parsing and ``allocated `` is the number
247
+ of bytes of dynamic memory allocated in the parser hierarchy.
248
+
249
+ The *max_factor * value must be a non-NaN :class: `float ` value greater than
250
+ or equal to 1.0. Amplifications factors greater than 100 can been observed
251
+ near the start of parsing even with benign files in practice. As such, the
252
+ upper bound must be carefully chosen so to avoid false positives.
253
+
254
+ An :exc: `ExpatError ` is raised if this method is called by a non-root
255
+ parser or if *max_factor * is outside the valid range. The corresponding
256
+ :attr: `~ExpatError.lineno ` and :attr: `~ExpatError.column ` should not be
257
+ used as they will have no special meaning.
258
+
259
+ .. note ::
260
+
261
+ The maximum amplification factor is only considered if the threshold
262
+ specified by :meth: `.SetAllocTrackerActivationThreshold ` is reached.
263
+
264
+ .. versionadded :: next
265
+
266
+ .. method :: xmlparser.SetAllocTrackerActivationThreshold(threshold, /)
267
+
268
+ Sets the number of allocated bytes of dynamic memory needed to activate
269
+ protection against disproportionate use of RAM.
270
+
271
+ By default, parsers objects have an allocation activation threshold of 64 MiB,
272
+ or equivalently 67,108,864 bytes.
273
+
274
+ An :exc: `ExpatError ` is raised if this method is called by a non-root parser.
275
+ The corresponding :attr: `~ExpatError.lineno ` and :attr: `~ExpatError.column `
276
+ should not be used as they will have no special meaning.
277
+
278
+ .. versionadded :: next
279
+
280
+
234
281
:class: `xmlparser ` objects have the following attributes:
235
282
236
283
0 commit comments