summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mupdf/pdf_pagetree.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/mupdf/pdf_pagetree.c b/mupdf/pdf_pagetree.c
index 2501c80a..c1625275 100644
--- a/mupdf/pdf_pagetree.c
+++ b/mupdf/pdf_pagetree.c
@@ -89,6 +89,13 @@ loadpagetree(pdf_xref *xref, pdf_pagetree *pages,
error = pdf_loadindirect(&kobj, xref, kref);
if (error) { fz_dropobj(kids); return fz_rethrow(error, "cannot load kid"); }
+ if (kobj == obj)
+ {
+ /* prevent infinite recursion possible in maliciously crafted PDFs */
+ fz_dropobj(kids);
+ return fz_throw("corrupted pdf file");
+ }
+
error = loadpagetree(xref, pages, inherit, kobj, kref, pagenum);
fz_dropobj(kobj);
if (error) { fz_dropobj(kids); return fz_rethrow(error, "cannot load subtree"); }