Commit f871b753dc831af5ee6e90f3941550f878e3f0c8
1 parent
3c4aa887
Enhance page labels handling with stricter validation and improved normalization…
… in damaged label tests - Add `validate()` call to `QPDFNumberTreeObjectHelper` for page label validation. - Introduce stricter enforcement of dictionary values and validation logic. - Update damaged page label test to remove `EXPECT_FAILURE`.
Showing
2 changed files
with
8 additions
and
5 deletions
libqpdf/QPDFPageLabelDocumentHelper.cc
| ... | ... | @@ -18,8 +18,12 @@ QPDFPageLabelDocumentHelper::QPDFPageLabelDocumentHelper(QPDF& qpdf) : |
| 18 | 18 | { |
| 19 | 19 | QPDFObjectHandle root = qpdf.getRoot(); |
| 20 | 20 | if (root.hasKey("/PageLabels")) { |
| 21 | - m->labels = | |
| 22 | - std::make_unique<QPDFNumberTreeObjectHelper>(root.getKey("/PageLabels"), this->qpdf); | |
| 21 | + m->labels = std::make_unique<QPDFNumberTreeObjectHelper>( | |
| 22 | + root.getKey("/PageLabels"), | |
| 23 | + this->qpdf, | |
| 24 | + [](QPDFObjectHandle const& o) -> bool { return o.isDictionary(); }, | |
| 25 | + true); | |
| 26 | + m->labels->validate(); | |
| 23 | 27 | } |
| 24 | 28 | } |
| 25 | 29 | |
| ... | ... | @@ -37,7 +41,7 @@ QPDFPageLabelDocumentHelper::getLabelForPage(long long page_idx) |
| 37 | 41 | } |
| 38 | 42 | QPDFNumberTreeObjectHelper::numtree_number offset = 0; |
| 39 | 43 | QPDFObjectHandle label; |
| 40 | - if (!m->labels->findObjectAtOrBelow(page_idx, label, offset) || !label.isDictionary()) { | |
| 44 | + if (!m->labels->findObjectAtOrBelow(page_idx, label, offset)) { | |
| 41 | 45 | return QPDFObjectHandle::newNull(); |
| 42 | 46 | } |
| 43 | 47 | QPDFObjectHandle S = label.getKey("/S"); // type (D, R, r, A, a) | ... | ... |
qpdf/qtest/page-labels.test
| ... | ... | @@ -36,8 +36,7 @@ $td->runtest("no page labels", |
| 36 | 36 | $td->runtest("damaged page labels", |
| 37 | 37 | {$td->COMMAND => "test_driver 47 page-labels-num-tree-damaged.pdf"}, |
| 38 | 38 | {$td->FILE => "page-labels-num-tree-damaged.out", $td->EXIT_STATUS => 0}, |
| 39 | -# $td->NORMALIZE_NEWLINES, | |
| 40 | - $td->EXPECT_FAILURE); | |
| 39 | + $td->NORMALIZE_NEWLINES); | |
| 41 | 40 | |
| 42 | 41 | # --set-page-labels |
| 43 | 42 | my @errors = ( | ... | ... |