From f871b753dc831af5ee6e90f3941550f878e3f0c8 Mon Sep 17 00:00:00 2001 From: m-holger Date: Wed, 27 Aug 2025 17:59:00 +0100 Subject: [PATCH] Enhance page labels handling with stricter validation and improved normalization in damaged label tests --- libqpdf/QPDFPageLabelDocumentHelper.cc | 10 +++++++--- qpdf/qtest/page-labels.test | 3 +-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/libqpdf/QPDFPageLabelDocumentHelper.cc b/libqpdf/QPDFPageLabelDocumentHelper.cc index af7ed1c..54f8238 100644 --- a/libqpdf/QPDFPageLabelDocumentHelper.cc +++ b/libqpdf/QPDFPageLabelDocumentHelper.cc @@ -18,8 +18,12 @@ QPDFPageLabelDocumentHelper::QPDFPageLabelDocumentHelper(QPDF& qpdf) : { QPDFObjectHandle root = qpdf.getRoot(); if (root.hasKey("/PageLabels")) { - m->labels = - std::make_unique(root.getKey("/PageLabels"), this->qpdf); + m->labels = std::make_unique( + root.getKey("/PageLabels"), + this->qpdf, + [](QPDFObjectHandle const& o) -> bool { return o.isDictionary(); }, + true); + m->labels->validate(); } } @@ -37,7 +41,7 @@ QPDFPageLabelDocumentHelper::getLabelForPage(long long page_idx) } QPDFNumberTreeObjectHelper::numtree_number offset = 0; QPDFObjectHandle label; - if (!m->labels->findObjectAtOrBelow(page_idx, label, offset) || !label.isDictionary()) { + if (!m->labels->findObjectAtOrBelow(page_idx, label, offset)) { return QPDFObjectHandle::newNull(); } QPDFObjectHandle S = label.getKey("/S"); // type (D, R, r, A, a) diff --git a/qpdf/qtest/page-labels.test b/qpdf/qtest/page-labels.test index 6e0e1e9..37f2a61 100644 --- a/qpdf/qtest/page-labels.test +++ b/qpdf/qtest/page-labels.test @@ -36,8 +36,7 @@ $td->runtest("no page labels", $td->runtest("damaged page labels", {$td->COMMAND => "test_driver 47 page-labels-num-tree-damaged.pdf"}, {$td->FILE => "page-labels-num-tree-damaged.out", $td->EXIT_STATUS => 0}, -# $td->NORMALIZE_NEWLINES, - $td->EXPECT_FAILURE); + $td->NORMALIZE_NEWLINES); # --set-page-labels my @errors = ( -- libgit2 0.21.4