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,8 +18,12 @@ QPDFPageLabelDocumentHelper::QPDFPageLabelDocumentHelper(QPDF& qpdf) : | ||
| 18 | { | 18 | { |
| 19 | QPDFObjectHandle root = qpdf.getRoot(); | 19 | QPDFObjectHandle root = qpdf.getRoot(); |
| 20 | if (root.hasKey("/PageLabels")) { | 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,7 +41,7 @@ QPDFPageLabelDocumentHelper::getLabelForPage(long long page_idx) | ||
| 37 | } | 41 | } |
| 38 | QPDFNumberTreeObjectHelper::numtree_number offset = 0; | 42 | QPDFNumberTreeObjectHelper::numtree_number offset = 0; |
| 39 | QPDFObjectHandle label; | 43 | QPDFObjectHandle label; |
| 40 | - if (!m->labels->findObjectAtOrBelow(page_idx, label, offset) || !label.isDictionary()) { | 44 | + if (!m->labels->findObjectAtOrBelow(page_idx, label, offset)) { |
| 41 | return QPDFObjectHandle::newNull(); | 45 | return QPDFObjectHandle::newNull(); |
| 42 | } | 46 | } |
| 43 | QPDFObjectHandle S = label.getKey("/S"); // type (D, R, r, A, a) | 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,8 +36,7 @@ $td->runtest("no page labels", | ||
| 36 | $td->runtest("damaged page labels", | 36 | $td->runtest("damaged page labels", |
| 37 | {$td->COMMAND => "test_driver 47 page-labels-num-tree-damaged.pdf"}, | 37 | {$td->COMMAND => "test_driver 47 page-labels-num-tree-damaged.pdf"}, |
| 38 | {$td->FILE => "page-labels-num-tree-damaged.out", $td->EXIT_STATUS => 0}, | 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 | # --set-page-labels | 41 | # --set-page-labels |
| 43 | my @errors = ( | 42 | my @errors = ( |