[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