Commit f871b753dc831af5ee6e90f3941550f878e3f0c8

Authored by m-holger
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`.
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-&gt;runtest(&quot;no page labels&quot;,
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 = (
... ...