poppler/Catalog.cc | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-)
New commits: commit db2ae1bdbb7fcb64ba4c91dfc574d9f970bebdf6 Author: Albert Astals Cid <[email protected]> Date: Sat Jun 4 13:23:11 2011 +0100 Make sure catDict is a dict diff --git a/poppler/Catalog.cc b/poppler/Catalog.cc index 60006b9..a8c2e39 100644 --- a/poppler/Catalog.cc +++ b/poppler/Catalog.cc @@ -751,6 +751,11 @@ int Catalog::getNumPages() Object catDict, pagesDict, obj; xref->getCatalog(&catDict); + if (!catDict.isDict()) { + error(-1, "Catalog object is wrong type (%s)", catDict.getTypeName()); + catDict.free(); + return 0; + } catDict.dictLookup("Pages", &pagesDict); catDict.free(); commit 58915affbdf1b5780f25d172a582c69fb2413230 Author: Albert Astals Cid <[email protected]> Date: Sat Jun 4 13:20:02 2011 +0100 Make sure catDict is a dict before using it KDE Bug 274888 shows it's possible to get aborts because of that diff --git a/poppler/Catalog.cc b/poppler/Catalog.cc index 8c77ebf..60006b9 100644 --- a/poppler/Catalog.cc +++ b/poppler/Catalog.cc @@ -238,17 +238,23 @@ GBool Catalog::cachePageTree(int page) xref->getCatalog(&catDict); - Object pagesDictRef; - if (catDict.dictLookupNF("Pages", &pagesDictRef)->isRef() && - pagesDictRef.getRefNum() >= 0 && - pagesDictRef.getRefNum() < xref->getNumObjects()) { - pagesRef = pagesDictRef.getRef(); - pagesDictRef.free(); + if (catDict.isDict()) { + Object pagesDictRef; + if (catDict.dictLookupNF("Pages", &pagesDictRef)->isRef() && + pagesDictRef.getRefNum() >= 0 && + pagesDictRef.getRefNum() < xref->getNumObjects()) { + pagesRef = pagesDictRef.getRef(); + pagesDictRef.free(); + } else { + error(-1, "Catalog dictionary does not contain a valid \"Pages\" entry"); + pagesDictRef.free(); + catDict.free(); + return gFalse; + } } else { - error(-1, "Catalog dictionary does not contain a valid \"Pages\" entry"); - pagesDictRef.free(); - catDict.free(); - return gFalse; + error(-1, "Could not find catalog dictionary"); + catDict.free(); + return gFalse; } Object obj; commit 4ebc7e364409fe303e7a5729b568913e3c92e7d4 Author: Albert Astals Cid <[email protected]> Date: Sat Jun 4 13:19:34 2011 +0100 We need to free catDict on failure diff --git a/poppler/Catalog.cc b/poppler/Catalog.cc index bc4c5aa..8c77ebf 100644 --- a/poppler/Catalog.cc +++ b/poppler/Catalog.cc @@ -247,6 +247,7 @@ GBool Catalog::cachePageTree(int page) } else { error(-1, "Catalog dictionary does not contain a valid \"Pages\" entry"); pagesDictRef.free(); + catDict.free(); return gFalse; } _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
