summaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-11-12 19:10:16 +0100
committerm-holger <m-holger@kubitscheck.org>2023-03-19 21:07:53 +0100
commitd8acccd5c8fff308a0010f787eedc594fa3e5ee9 (patch)
tree59591ebba800d6c043663f717189b0c373d58e48 /libqpdf
parent1e53da74bc3cf0cbd3bd3dae2890e83ad33c3ed4 (diff)
downloadqpdf-d8acccd5c8fff308a0010f787eedc594fa3e5ee9.tar.zst
Warn if catalog type entry is invalid (fixes #810)
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDF.cc7
-rw-r--r--libqpdf/QPDFJob.cc1
2 files changed, 8 insertions, 0 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index 69508b08..c6f6ae6e 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -2461,6 +2461,13 @@ QPDF::getRoot()
QPDFObjectHandle root = this->m->trailer.getKey("/Root");
if (!root.isDictionary()) {
throw damagedPDF("", 0, "unable to find /Root dictionary");
+ } else if (
+ // Check_mode is an interim solution to request #810 pending a more
+ // comprehensive review of the approach to more extensive checks and
+ // warning levels.
+ m->check_mode && !root.getKey("/Type").isNameAndEquals("/Catalog")) {
+ warn(damagedPDF("", 0, "catalog /Type entry missing or invalid"));
+ root.replaceKey("/Type", "/Catalog"_qpdf);
}
return root;
}
diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc
index b57a791b..646a21fc 100644
--- a/libqpdf/QPDFJob.cc
+++ b/libqpdf/QPDFJob.cc
@@ -798,6 +798,7 @@ QPDFJob::doCheck(QPDF& pdf)
bool okay = true;
auto& cout = *this->m->log->getInfo();
cout << "checking " << m->infilename.get() << "\n";
+ QPDF::JobSetter::setCheckMode(pdf, true);
try {
int extension_level = pdf.getExtensionLevel();
cout << "PDF Version: " << pdf.getPDFVersion();