Summary
extract_text (and any layout extraction) raises ValueError: not enough values to unpack (expected 4, got 2) on PDFs that contain a form XObject whose /BBox is not the four-number rectangle required by the spec.
Root cause
In PDFPageInterpreter.do_Do (pdfminer/pdfinterp.py), a form XObject's /BBox is passed straight to begin_figure → LTFigure.__init__ (pdfminer/layout.py), which unpacks it with (x, y, w, h) = bbox. A /BBox with a different number of elements (e.g. [0 0]) therefore raises a ValueError and aborts the whole extraction. The length of /BBox is never validated.
Minimal reproduction
A form XObject with /BBox [0 0]:
import io
import pdfminer.high_level
pdf = (
b"%PDF-1.4\n"
b"1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj\n"
b"2 0 obj <</Type/Pages/Kids[3 0 R]/Count 1>> endobj\n"
b"3 0 obj <</Type/Page/Parent 2 0 R/MediaBox[0 0 200 200]"
b"/Resources<</XObject<</Fm0 4 0 R>>>>/Contents 5 0 R>> endobj\n"
b"4 0 obj <</Type/XObject/Subtype/Form/FormType 1/BBox [0 0]"
b"/Resources<<>>/Length 3>>\nstream\nq Q\nendstream endobj\n"
b"5 0 obj <</Length 7>>\nstream\n/Fm0 Do\nendstream endobj\n"
b"trailer<</Root 1 0 R>>\n%%EOF"
)
pdfminer.high_level.extract_text(io.BytesIO(pdf))
# ValueError: not enough values to unpack (expected 4, got 2)
(Real-world PDFs from some generators ship such non-conformant form bboxes; this also surfaces downstream in pdfplumber and tools built on it such as markitdown.)
Expected
A non-conformant /BBox should not crash extraction. In non-STRICT mode the malformed bbox should be tolerated (the rest of the document still extracted); STRICT mode may raise.
Environment
- pdfminer.six 20251230, Python 3.13
I have a fix + regression test ready and will open a PR referencing this issue.
Summary
extract_text(and any layout extraction) raisesValueError: not enough values to unpack (expected 4, got 2)on PDFs that contain a form XObject whose/BBoxis not the four-number rectangle required by the spec.Root cause
In
PDFPageInterpreter.do_Do(pdfminer/pdfinterp.py), a form XObject's/BBoxis passed straight tobegin_figure→LTFigure.__init__(pdfminer/layout.py), which unpacks it with(x, y, w, h) = bbox. A/BBoxwith a different number of elements (e.g.[0 0]) therefore raises aValueErrorand aborts the whole extraction. The length of/BBoxis never validated.Minimal reproduction
A form XObject with
/BBox [0 0]:(Real-world PDFs from some generators ship such non-conformant form bboxes; this also surfaces downstream in pdfplumber and tools built on it such as
markitdown.)Expected
A non-conformant
/BBoxshould not crash extraction. In non-STRICT mode the malformed bbox should be tolerated (the rest of the document still extracted); STRICT mode may raise.Environment
I have a fix + regression test ready and will open a PR referencing this issue.