[poppler] utils/pdfunite.cc
Albert Astals Cid
aacid at kemper.freedesktop.org
Fri May 26 22:10:29 UTC 2017
utils/pdfunite.cc | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
New commits:
commit 5c9b08a875b07853be6c44e43ff5f7f059df666a
Author: Albert Astals Cid <aacid at kde.org>
Date: Sat May 27 00:09:17 2017 +0200
pdfunite: Fix crash with broken documents
Sometimes we can't parse pages so check before accessing them
Thanks to Jiaqi Peng for the report
Fixes bugs #101153 and #101149
diff --git a/utils/pdfunite.cc b/utils/pdfunite.cc
index dfe48bf8..c32e201b 100644
--- a/utils/pdfunite.cc
+++ b/utils/pdfunite.cc
@@ -7,7 +7,7 @@
// Copyright (C) 2011-2015, 2017 Thomas Freitag <Thomas.Freitag at alfa.de>
// Copyright (C) 2012 Arseny Solokha <asolokha at gmx.com>
// Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
-// Copyright (C) 2012, 2014 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2012, 2014, 2017 Albert Astals Cid <aacid at kde.org>
// Copyright (C) 2013 Adrian Johnson <ajohnson at redneon.com>
// Copyright (C) 2013 Hib Eris <hib at hiberis.nl>
// Copyright (C) 2015 Arthur Stavisky <vovodroid at gmail.com>
@@ -268,15 +268,15 @@ int main (int argc, char *argv[])
catDict->lookup("OutputIntents", &intents);
catDict->lookupNF("AcroForm", &afObj);
Ref *refPage = docs[0]->getCatalog()->getPageRef(1);
- if (!afObj.isNull()) {
+ if (!afObj.isNull() && refPage) {
docs[0]->markAcroForm(&afObj, yRef, countRef, 0, refPage->num, refPage->num);
}
catDict->lookupNF("OCProperties", &ocObj);
- if (!ocObj.isNull() && ocObj.isDict()) {
+ if (!ocObj.isNull() && ocObj.isDict() && refPage) {
docs[0]->markPageObjects(ocObj.getDict(), yRef, countRef, 0, refPage->num, refPage->num);
}
catDict->lookup("Names", &names);
- if (!names.isNull() && names.isDict()) {
+ if (!names.isNull() && names.isDict() && refPage) {
docs[0]->markPageObjects(names.getDict(), yRef, countRef, 0, refPage->num, refPage->num);
}
if (intents.isArray() && intents.arrayGetLength() > 0) {
@@ -353,6 +353,10 @@ int main (int argc, char *argv[])
for (i = 0; i < (int) docs.size(); i++) {
for (j = 1; j <= docs[i]->getNumPages(); j++) {
+ if (!docs[i]->getCatalog()->getPage(j)) {
+ continue;
+ }
+
PDFRectangle *cropBox = NULL;
if (docs[i]->getCatalog()->getPage(j)->isCropped())
cropBox = docs[i]->getCatalog()->getPage(j)->getCropBox();
More information about the poppler
mailing list