aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/patches/poppler-fix-crash-with-broken-documents.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/poppler-fix-crash-with-broken-documents.patch')
-rw-r--r--gnu/packages/patches/poppler-fix-crash-with-broken-documents.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/gnu/packages/patches/poppler-fix-crash-with-broken-documents.patch b/gnu/packages/patches/poppler-fix-crash-with-broken-documents.patch
new file mode 100644
index 0000000000..353a16e322
--- /dev/null
+++ b/gnu/packages/patches/poppler-fix-crash-with-broken-documents.patch
@@ -0,0 +1,61 @@
+Copied from:
+
+ https://cgit.freedesktop.org/poppler/poppler/patch/?id=5c9b08a875b07853be6c44e43ff5f7f059df666a
+
+From 5c9b08a875b07853be6c44e43ff5f7f059df666a Mon Sep 17 00:00:00 2001
+From: Albert Astals Cid <aacid@kde.org>
+Date: Sat, 27 May 2017 00:09:17 +0200
+Subject: 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 dfe48bf..c32e201 100644
+--- a/utils/pdfunite.cc
++++ b/utils/pdfunite.cc
+@@ -7,7 +7,7 @@
+ // Copyright (C) 2011-2015, 2017 Thomas Freitag <Thomas.Freitag@alfa.de>
+ // Copyright (C) 2012 Arseny Solokha <asolokha@gmx.com>
+ // Copyright (C) 2012 Fabio D'Urso <fabiodurso@hotmail.it>
+-// Copyright (C) 2012, 2014 Albert Astals Cid <aacid@kde.org>
++// Copyright (C) 2012, 2014, 2017 Albert Astals Cid <aacid@kde.org>
+ // Copyright (C) 2013 Adrian Johnson <ajohnson@redneon.com>
+ // Copyright (C) 2013 Hib Eris <hib@hiberis.nl>
+ // Copyright (C) 2015 Arthur Stavisky <vovodroid@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();
+--
+cgit v0.10.2
+