diff options
author | m-holger <m-holger@kubitscheck.org> | 2023-07-29 14:16:40 +0200 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2023-07-29 14:16:40 +0200 |
commit | 9a69cbba5b0502d0699d526860446791b9fef6f1 (patch) | |
tree | 1db4fe4d8df10ab5d6bea86cfac27220d50f63b9 /libqpdf | |
parent | c1afe9f83bee238cce3cd68619d22c21bd7541a7 (diff) | |
download | qpdf-9a69cbba5b0502d0699d526860446791b9fef6f1.tar.zst |
Check for missing mediaboxes
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDF_pages.cc | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/libqpdf/QPDF_pages.cc b/libqpdf/QPDF_pages.cc index e03dabc8..4e3e77c0 100644 --- a/libqpdf/QPDF_pages.cc +++ b/libqpdf/QPDF_pages.cc @@ -68,7 +68,7 @@ QPDF::getAllPages() seen.clear(); if (pages.hasKey("/Kids")) { // Ensure we actually found a /Pages object. - getAllPagesInternal(pages, visited, seen); + getAllPagesInternal(pages, visited, seen, false); } } return m->all_pages; @@ -76,7 +76,7 @@ QPDF::getAllPages() void QPDF::getAllPagesInternal( - QPDFObjectHandle cur_node, QPDFObjGen::set& visited, QPDFObjGen::set& seen) + QPDFObjectHandle cur_node, QPDFObjGen::set& visited, QPDFObjGen::set& seen, bool media_box) { if (!visited.add(cur_node)) { throw QPDFExc( @@ -90,13 +90,26 @@ QPDF::getAllPagesInternal( cur_node.warnIfPossible("/Type key should be /Pages but is not; overriding"); cur_node.replaceKey("/Type", "/Pages"_qpdf); } + if (!media_box) { + media_box = cur_node.getKey("/MediaBox").isRectangle(); + QTC::TC("qpdf", "QPDF inherit mediabox", media_box ? 0 : 1); + } auto kids = cur_node.getKey("/Kids"); int n = kids.getArrayNItems(); for (int i = 0; i < n; ++i) { auto kid = kids.getArrayItem(i); if (kid.hasKey("/Kids")) { - getAllPagesInternal(kid, visited, seen); + getAllPagesInternal(kid, visited, seen, media_box); } else { + if (!media_box && !kid.getKey("/MediaBox").isRectangle()) { + QTC::TC("qpdf", "QPDF missing mediabox"); + kid.warnIfPossible( + "kid " + std::to_string(i) + + " (from 0) MediaBox is undefined; setting to letter / ANSI A"); + kid.replaceKey( + "/MediaBox", + QPDFObjectHandle::newArray(QPDFObjectHandle::Rectangle(0, 0, 612, 792))); + } if (!kid.isIndirect()) { QTC::TC("qpdf", "QPDF handle direct page object"); cur_node.warnIfPossible( |