diff options
author | Krzysztof Kowalczyk <kkowalczyk@gmail.com> | 2008-04-18 06:14:03 +0200 |
---|---|---|
committer | Krzysztof Kowalczyk <kkowalczyk@gmail.com> | 2008-04-18 06:14:03 +0200 |
commit | 7800003a8fd28c386fcefa652376bbe7e5aa0ddb (patch) | |
tree | 9c8f55650e38a2b8d54cd8cfc888b4638e36b83f | |
parent | 33a1106acd0d1d3b3d8634ae8087ebfe72d010cf (diff) | |
download | mupdf-7800003a8fd28c386fcefa652376bbe7e5aa0ddb.tar.xz |
prevent infinite recursion possible in maliciously crafted PDFs (fixes c048d6b9f2d55f18cf79f30a76c1779a335edd0d.pdf)"
-rw-r--r-- | mupdf/pdf_pagetree.c | 7 |
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"); } |