[poppler] 2 commits - poppler/PDFDoc.cc poppler/XRef.cc

Albert Astals Cid aacid at kemper.freedesktop.org
Mon Aug 1 21:06:10 UTC 2016


 poppler/PDFDoc.cc |    3 +++
 poppler/XRef.cc   |    6 +++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

New commits:
commit 0889366a5872316919dbb640b6cc5cda85295169
Author: Jakub Kucharski <jakubkucharski97 at gmail.com>
Date:   Mon Aug 1 01:10:18 2016 +0200

    XRef::createDocInfoIfNoneExists(): don't presume that DocInfo is a dictionary
    
    In case a PDF document doesn't comply with the PDF reference and its DocInfo
    object isn't a dictionary, remove it and create a dictionary in its place.

diff --git a/poppler/XRef.cc b/poppler/XRef.cc
index f88c632..75fa52d 100644
--- a/poppler/XRef.cc
+++ b/poppler/XRef.cc
@@ -1295,8 +1295,12 @@ Object *XRef::getDocInfoNF(Object *obj) {
 Object *XRef::createDocInfoIfNoneExists(Object *obj) {
   getDocInfo(obj);
 
-  if (!obj->isNull()) {
+  if (obj->isDict()) {
     return obj;
+  } else if (!obj->isNull()) {
+    // DocInfo exists, but isn't a dictionary (doesn't comply with the PDF reference)
+    obj->free();
+    removeDocInfo();
   }
 
   obj->initDict(this);
commit 7ba975630e12a3242d73372a685e016101c5e479
Author: Jakub Kucharski <jakubkucharski97 at gmail.com>
Date:   Mon Aug 1 01:17:08 2016 +0200

    PDFDoc::setDocInfoStringEntry(): free empty value string
    
    Normally the ownership of value is passed on to the Object class. In case value
    is an empty string, it doesn't happen, so we have to free it in order to have
    a uniform behaviour managing memory and not to introduce memory leaks.

diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc
index a51d8b6..f3383fc 100644
--- a/poppler/PDFDoc.cc
+++ b/poppler/PDFDoc.cc
@@ -612,6 +612,9 @@ void PDFDoc::setDocInfoModified(Object *infoObj)
 void PDFDoc::setDocInfoStringEntry(const char *key, GooString *value)
 {
   GBool removeEntry = !value || value->getLength() == 0;
+  if (removeEntry) {
+    delete value;
+  }
 
   Object infoObj;
   getDocInfo(&infoObj);


More information about the poppler mailing list