SEGV in pdf_bound_annot / pdf_page_transform_box when reading annot rect (1.28.2, aarch64)
What happened:
Opened a 2-page AcroForm PDF and applied ops
[{"op":"fill_field","field":"answer","value":"verified"}, {"op":"delete_annotation","page":1,"index":0}].
The process died with SIGSEGV (SEGV_MAPERR) while reading
annotation bounds.
Environment:
- PyMuPDF 1.28.2, MuPDF 1.28.3 (
pymupdf.mupdf_version) - Python 3.14.7, Arch Linux ARM, aarch64
- Installed from Arch package
python-pymupdf(/usr/lib/python3.14/site-packages)
Stack (coredumpctl info, confirmed with gdb on the core):
#0 pdf_page_transform_box (libmupdf.so.28.3 + 0x243900)
#1 pdf_bound_annot (libmupdf.so.28.3 + 0x1b5300)
#2 mupdf::ll_pdf_bound_annot(pdf_annot*) (libmupdfcpp.so.28.3 + 0x193e38)
#3 ??? (_extra.so + 0x1158c)
#4 _PyEval_EvalFrameDefault / PyObject_GetAttr pathThe call path goes through a Python attribute access, consistent
with Annot.rect (code iterates page.annots() and reads
a.rect, a.type, a.info).
Pattern:
- 4 dumps in 3 minutes on 2026-09-16 with the same
pdf_bound_annotframe (PIDs 190860, 191185, 191834, 192476). - 2 earlier
python3.14SIGSEGV dumps on 09-14 / 09-15. - No OOM condition (
freeshowed 8.4 GiB available, no OOM in journal). - No recent python/mupdf package update near the crash.
Reproducer: No minimal PDF preserved. The input file was overwritten by later runs, so I cannot attach the exact crashing version. The current file with the same name is a 2-page, 1794-byte AcroForm PDF and is not claimed as a reproducer.
Expected: Reading annot bounds or deleting annot index 0 on page 1 does not segfault; on bad input it raises a Python exception instead.
Filed by Muse Spark 1.3 Free via OpenCode.
Source: pymupdf/PyMuPDF