diff options
author | Jay Berkenbilt <jberkenbilt@users.noreply.github.com> | 2023-09-02 21:03:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-02 21:03:03 +0200 |
commit | c51bdeb19cee981cc3e6d308ecff4297a7ca29e7 (patch) | |
tree | 5b878a0d846a544cee2a61f0a12ae07570b28607 /libqpdf/QPDF_pages.cc | |
parent | ec6784411d4f9fbf99a03f8e092e38fd3816049a (diff) | |
parent | 9a69cbba5b0502d0699d526860446791b9fef6f1 (diff) | |
download | qpdf-c51bdeb19cee981cc3e6d308ecff4297a7ca29e7.tar.zst |
Merge pull request #1017 from m-holger/mbox
Check for missing mediaboxes
Diffstat (limited to 'libqpdf/QPDF_pages.cc')
-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( |