docling: resource exhaustion
Medium4.3CVE-2026-105747 · Published Oct 6, 2026
### Summary When docling detects the input format of a gzip-compressed tar archive (METS-GBS), and later when the METS-GBS backend opens it, it calls `tarfile.TarFile.getmembers()`. That builds the full member list in memory before the `max_member_count` limit is checked. A small archive with a very large number of empty members therefore makes docling allocate memory in proportion to the member count, and the limit has no effect. ### Details `docling/datamodel/document.py` (format detection) and `docling/backend/mets_gbs_backend.py` both iterate `tar.getmembers()` and count members inside the loop. `getmembers()` reads every header up front. Measured on Python 3.12: an archive of 1,000,000 empty members compresses to about 6.2 MB and makes `getmembers()` hold about 408 MB (about 66 times the input size). Format detection runs for any `application/gzip` input before `allowed_formats` is applied, so the allocation happens even when METS-GBS is not an allowed format. This check was introduced by the fix for CVE-2026-44018 (GHSA-r3xg-rg9j-67fv) in 2.91.0. The eager enumeration it relies on has been there since METS-GBS detection was added in 2.45.0. ### Impact Memory exhaustion...
Affected versions
| Package | Affected | Fixed in |
|---|---|---|
| docling PyPI | >= 2.45.0, < 2.131.0 | 2.131.0 |
Details and references
### Summary When docling detects the input format of a gzip-compressed tar archive (METS-GBS), and later when the METS-GBS backend opens it, it calls `tarfile.TarFile.getmembers()`. That builds the full member list in memory before the `max_member_count` limit is checked. A small archive with a very large number of empty members therefore makes docling allocate memory in proportion to the member count, and the limit has no effect. ### Details `docling/datamodel/document.py` (format detection) and `docling/backend/mets_gbs_backend.py` both iterate `tar.getmembers()` and count members inside the loop. `getmembers()` reads every header up front. Measured on Python 3.12: an archive of 1,000,000 empty members compresses to about 6.2 MB and makes `getmembers()` hold about 408 MB (about 66 times the input size). Format detection runs for any `application/gzip` input before `allowed_formats` is applied, so the allocation happens even when METS-GBS is not an allowed format. This check was introduced by the fix for CVE-2026-44018 (GHSA-r3xg-rg9j-67fv) in 2.91.0. The eager enumeration it relies on has been there since METS-GBS detection was added in 2.45.0. ### Impact Memory exhaustion of the converting process, proportional to the size of the input archive. Confidentiality and integrity are not affected. ### Patches Fixed in docling 2.131.0 by [#4412](https://github.com/docling-project/docling/pull/4412). Format detection and the METS-GBS backend now read archive members one at a time and stop as soon as `max_member_count` is exceeded, including when looking up page files. ### Workarounds Upgrade to 2.131.0. For older versions: Reject gzip or tar inputs before they reach docling when METS-GBS support is not needed, and run conversions of untrusted input with memory limits.
- CVSS 3.1
- CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L
- Severity from
- GitHub (reviewed advisory)
- Weakness
- CWE-409, CWE-770
- Also known as
- CVE-2026-105747
- github.com/docling-project/docling/security/advisories/GHSA-3cr3-8m4c-fpxw
- nvd.nist.gov/vuln/detail/CVE-2026-105747
- github.com/docling-project/docling/pull/4412
- github.com/docling-project/docling/commit/ebae65cd71c37c88b36185b406a449b92d8f7ffa
- github.com/docling-project/docling
- github.com/docling-project/docling/releases/tag/v2.131.0
More docling advisories
All docling| Date | Advisory | Severity | Fixed in |
|---|---|---|---|
| Oct 6 | Docling: `enable_local_fetch` is not enforced in HTML browser-rendering mode | Medium5.9 | 2.118.1 |
| Oct 5 | Docling: Arbitrary local file read via draw:image xlink:href in the OpenDocument backend | Medium | 2.120.3 |
| Jun 3 | Docling: Unsafe URI and Path Handling in HTML Backend | High7.1 | 2.94.0 |
| Jun 3 | Docling: Potential Path Traversal via LaTeX \includegraphics and \input Commands | Medium5.5 | 2.91.0 |
| Jun 3 | Docling: Unsafe XML Entity Expansion in USPTO Patent Backend | High7.5 | 2.74.0 |
| Jun 3 | Docling: Unsafe Archive Extraction and XML Parsing in METS-GBS Backend | Medium5.5 | 2.91.0 |