diff options
author | Marek Kasik <mkasik@redhat.com> | 2019-03-04 12:55:12 +0100 |
---|---|---|
committer | Marek Kasik <mkasik@redhat.com> | 2019-03-04 12:55:12 +0100 |
commit | 7b4e372deeb716eb3fe3a54b31ed41af759224f9 (patch) | |
tree | f0dc38d9dea0d9bb2e281f40e5b294fb7712be8c /utils | |
parent | 2e406d3de277545c61ef462aca5b9e7b984dc477 (diff) |
pdfunite: Check XRef's Catalog for being a Dict
Check whether Catalog from XRef is Dict for each document
passed to pdfunite and return error if not.
https://gitlab.freedesktop.org/poppler/poppler/issues/706
Diffstat (limited to 'utils')
-rw-r--r-- | utils/pdfunite.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/utils/pdfunite.cc b/utils/pdfunite.cc index b0142116..23888684 100644 --- a/utils/pdfunite.cc +++ b/utils/pdfunite.cc @@ -165,7 +165,8 @@ int main (int argc, char *argv[]) for (i = 1; i < argc - 1; i++) { GooString *gfileName = new GooString(argv[i]); PDFDoc *doc = new PDFDoc(gfileName, nullptr, nullptr, nullptr); - if (doc->isOk() && !doc->isEncrypted()) { + if (doc->isOk() && !doc->isEncrypted() && + doc->getXRef()->getCatalog().isDict()) { docs.push_back(doc); if (doc->getPDFMajorVersion() > majorVersion) { majorVersion = doc->getPDFMajorVersion(); @@ -176,8 +177,13 @@ int main (int argc, char *argv[]) } } } else if (doc->isOk()) { - error(errUnimplemented, -1, "Could not merge encrypted files ('{0:s}')", argv[i]); - return -1; + if (doc->isEncrypted()) { + error(errUnimplemented, -1, "Could not merge encrypted files ('{0:s}')", argv[i]); + return -1; + } else if (!doc->getXRef()->getCatalog().isDict()) { + error(errSyntaxError, -1, "XRef's Catalog is not a dictionary ('{0:s}')", argv[i]); + return -1; + } } else { error(errSyntaxError, -1, "Could not merge damaged documents ('{0:s}')", argv[i]); return -1; |