diff options
Diffstat (limited to 'Build/source/libs/xpdf/xpdf-src/xpdf/pdffonts.cc')
-rw-r--r-- | Build/source/libs/xpdf/xpdf-src/xpdf/pdffonts.cc | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/Build/source/libs/xpdf/xpdf-src/xpdf/pdffonts.cc b/Build/source/libs/xpdf/xpdf-src/xpdf/pdffonts.cc index bde57557c3c..ad9e40d7c62 100644 --- a/Build/source/libs/xpdf/xpdf-src/xpdf/pdffonts.cc +++ b/Build/source/libs/xpdf/xpdf-src/xpdf/pdffonts.cc @@ -96,6 +96,10 @@ static char *seenObjs; static int numObjects; int main(int argc, char *argv[]) { +#if USE_EXCEPTIONS + try { +#endif + char *fileName; GString *ownerPW, *userPW; GBool ok; @@ -174,22 +178,21 @@ int main(int argc, char *argv[]) { numObjects = doc->getXRef()->getNumObjects(); seenObjs = (char *)gmalloc(numObjects); memset(seenObjs, 0, numObjects); + annots = doc->getAnnots(); for (pg = firstPage; pg <= lastPage; ++pg) { page = doc->getCatalog()->getPage(pg); if ((resDict = page->getResourceDict())) { scanFonts(resDict, doc); } - annots = new Annots(doc, page->getAnnots(&obj1)); - obj1.free(); - for (i = 0; i < annots->getNumAnnots(); ++i) { - if (annots->getAnnot(i)->getAppearance(&obj1)->isStream()) { + int nAnnots = annots->getNumAnnots(pg); + for (i = 0; i < nAnnots; ++i) { + if (annots->getAnnot(pg, i)->getAppearance(&obj1)->isStream()) { obj1.streamGetDict()->lookupNF("Resources", &obj2); scanFonts(&obj2, doc); obj2.free(); } obj1.free(); } - delete annots; } if ((form = doc->getCatalog()->getForm())) { for (i = 0; i < form->getNumFields(); ++i) { @@ -222,6 +225,13 @@ int main(int argc, char *argv[]) { gMemReport(stderr); return exitCode; + +#if USE_EXCEPTIONS + } catch (GMemException e) { + fprintf(stderr, "Out of memory\n"); + return 98; + } +#endif } static void scanFonts(Object *obj, PDFDoc *doc) { |