diff options
author | Albert Astals Cid <aacid@kde.org> | 2017-04-25 19:48:24 +0200 |
---|---|---|
committer | Albert Astals Cid <aacid@kde.org> | 2017-04-25 19:48:24 +0200 |
commit | b21b041f7948680c03109f0c404400a9dbc4544c (patch) | |
tree | c31177668f88d0b2c8d14fcbcd3894e9e5fc292a | |
parent | 278439531b13b0b047dbe3a75aa3f1b3407c8bd4 (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.cc | 13 |
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) { |