poppler/Outline.cc | 18 ++++-------------- poppler/Outline.h | 4 ++-- 2 files changed, 6 insertions(+), 16 deletions(-)
New commits: commit 0c9c2089f52de5bb08717518c439fa8bbb99011f Author: Albert Astals Cid <[email protected]> Date: Wed Nov 23 20:22:17 2016 +0100 Fix Outline parsing on broken documents Broken documents in which the parent "Last" pointer is earlier than the siblings "Next" pointer This mimics Adobe Reader behaviour. Bug #98732 diff --git a/poppler/Outline.cc b/poppler/Outline.cc index 707ffdb..bf46be2 100644 --- a/poppler/Outline.cc +++ b/poppler/Outline.cc @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005 Marco Pesenti Gritti <[email protected]> -// Copyright (C) 2008 Albert Astals Cid <[email protected]> +// Copyright (C) 2008, 2016 Albert Astals Cid <[email protected]> // Copyright (C) 2009 Nick Jones <[email protected]> // Copyright (C) 2016 Jason Crain <[email protected]> // @@ -47,9 +47,7 @@ Outline::Outline(Object *outlineObj, XRef *xref) { if (!outlineObj->isDict()) { return; } - items = OutlineItem::readItemList(outlineObj->dictLookupNF("First", &first), - outlineObj->dictLookupNF("Last", &last), - xref); + items = OutlineItem::readItemList(outlineObj->dictLookupNF("First", &first), xref); first.free(); last.free(); } @@ -115,17 +113,13 @@ OutlineItem::~OutlineItem() { nextRef.free(); } -GooList *OutlineItem::readItemList(Object *firstItemRef, Object *lastItemRef, - XRef *xrefA) { +GooList *OutlineItem::readItemList(Object *firstItemRef, XRef *xrefA) { GooList *items; char* alreadyRead; OutlineItem *item; Object obj; Object *p; - if (!lastItemRef->isRef()) - return NULL; - items = new GooList(); alreadyRead = (char *)gmalloc(xrefA->getNumObjects()); @@ -144,10 +138,6 @@ GooList *OutlineItem::readItemList(Object *firstItemRef, Object *lastItemRef, item = new OutlineItem(obj.getDict(), xrefA); obj.free(); items->append(item); - if (p->getRef().num == lastItemRef->getRef().num && - p->getRef().gen == lastItemRef->getRef().gen) { - break; - } p = &item->nextRef; } @@ -163,7 +153,7 @@ GooList *OutlineItem::readItemList(Object *firstItemRef, Object *lastItemRef, void OutlineItem::open() { if (!kids) { - kids = readItemList(&firstRef, &lastRef, xref); + kids = readItemList(&firstRef, xref); } } diff --git a/poppler/Outline.h b/poppler/Outline.h index 90190e6..46775d5 100644 --- a/poppler/Outline.h +++ b/poppler/Outline.h @@ -14,6 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005 Marco Pesenti Gritti <[email protected]> +// Copyright (C) 2016 Albert Astals Cid <[email protected]> // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git @@ -59,8 +60,7 @@ public: OutlineItem(Dict *dict, XRef *xrefA); ~OutlineItem(); - static GooList *readItemList(Object *firstItemRef, Object *lastItemRef, - XRef *xrefA); + static GooList *readItemList(Object *firstItemRef, XRef *xrefA); void open(); void close(); _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
