From a7308953c984198c8000ac7727f6074cbc053f20 Mon Sep 17 00:00:00 2001 From: Jakub Kucharski Date: Wed, 27 Jul 2016 08:00:42 +0200 Subject: [PATCH] fix xref entry ref.gen updating --- poppler/PDFDoc.cc | 11 ++++++++++- poppler/XRef.cc | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc index 296ed1a..8096dd1 100644 --- a/poppler/PDFDoc.cc +++ b/poppler/PDFDoc.cc @@ -605,7 +605,16 @@ void PDFDoc::setDocInfoModified(Object *infoObj) { Object infoObjRef; getDocInfoNF(&infoObjRef); - xref->setModifiedObject(infoObj, infoObjRef.getRef()); + Ref ref = infoObjRef.getRef(); + + if (xref->getEntry(ref.num)->getFlag(XRefEntry::Updated) == gTrue) { + infoObjRef.free(); + return; + } + + xref->setModifiedObject(infoObj, ref); + infoObjRef.initRef(ref.num, ref.gen + 1); + xref->getTrailerDict()->dictSet("Info", &infoObjRef); infoObjRef.free(); } diff --git a/poppler/XRef.cc b/poppler/XRef.cc index f88c632..6542f63 100644 --- a/poppler/XRef.cc +++ b/poppler/XRef.cc @@ -1408,6 +1408,9 @@ void XRef::setModifiedObject (Object* o, Ref r) { XRefEntry *e = getEntry(r.num); e->obj.free(); o->copy(&(e->obj)); + if (e->getFlag(XRefEntry::Updated) == gFalse) { + e->gen++; + } e->setFlag(XRefEntry::Updated, gTrue); setModified(); } -- 2.9.0