summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Astals Cid <aacid@kde.org>2017-04-25 19:48:24 +0200
committerAlbert Astals Cid <aacid@kde.org>2017-04-25 19:48:24 +0200
commitb21b041f7948680c03109f0c404400a9dbc4544c (patch)
treec31177668f88d0b2c8d14fcbcd3894e9e5fc292a
parent278439531b13b0b047dbe3a75aa3f1b3407c8bd4 (diff)
Fix memory leak when reconstructing broken files
Need to free the catalog variable if we're going to fetch over it again Bug #100776
-rw-r--r--poppler/XRef.cc13
1 files changed, 8 insertions, 5 deletions
diff --git a/poppler/XRef.cc b/poppler/XRef.cc
index c141bbfe..6ea0fbb6 100644
--- a/poppler/XRef.cc
+++ b/poppler/XRef.cc
@@ -1144,13 +1144,16 @@ GBool XRef::okToAssemble(GBool ignoreOwnerPW) {
}
Object *XRef::getCatalog(Object *catalog) {
- Object *obj = fetch(rootNum, rootGen, catalog);
- if (obj->isDict()) {
- return obj;
+ fetch(rootNum, rootGen, catalog);
+ if (catalog->isDict()) {
+ return catalog;
}
GBool wasReconstructed = false;
- GBool ok = constructXRef(&wasReconstructed, gTrue);
- return (ok) ? fetch(rootNum, rootGen, catalog) : obj;
+ if (constructXRef(&wasReconstructed, gTrue)) {
+ catalog->free();
+ fetch(rootNum, rootGen, catalog);
+ }
+ return catalog;
}
Object *XRef::fetch(int num, int gen, Object *obj, int recursion) {