From e78c1201b587649d7a35241d5d4abeb927c4455c Mon Sep 17 00:00:00 2001 From: m-holger Date: Sun, 17 Aug 2025 14:17:48 +0100 Subject: [PATCH] Refactor `NNTreeIterator::increment`: simplify loop logic, replace `getArrayNItems` and `getArrayItem` with `size` and subscript operators, remove redundant debug traces, and improve readability. --- libqpdf/NNTree.cc | 17 +++++++---------- qpdf/qpdf.testcov | 3 --- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/libqpdf/NNTree.cc b/libqpdf/NNTree.cc index 9adecc9..0a7d9d5 100644 --- a/libqpdf/NNTree.cc +++ b/libqpdf/NNTree.cc @@ -121,21 +121,20 @@ void NNTreeIterator::increment(bool backward) { if (item_number < 0) { - QTC::TC("qpdf", "NNTree increment end()"); deepen(impl.oh, !backward, true); return; } - bool found_valid_key = false; - while (valid() && !found_valid_key) { + + while (valid()) { item_number += backward ? -2 : 2; auto items = node.getKey(impl.details.itemsKey()); - if (item_number < 0 || item_number >= items.getArrayNItems()) { + if (item_number < 0 || std::cmp_greater_equal(item_number, items.size())) { bool found = false; setItemNumber(QPDFObjectHandle(), -1); while (!(found || path.empty())) { auto& element = path.back(); auto pe_node = getNextKid(element, backward); - if (pe_node.isNull()) { + if (pe_node.null()) { path.pop_back(); } else { found = deepen(pe_node, !backward, false); @@ -144,14 +143,12 @@ NNTreeIterator::increment(bool backward) } if (item_number >= 0) { items = node.getKey(impl.details.itemsKey()); - if (item_number + 1 >= items.getArrayNItems()) { - QTC::TC("qpdf", "NNTree skip item at end of short items"); + if (std::cmp_greater_equal(item_number + 1, items.size())) { impl.warn(node, "items array doesn't have enough elements"); - } else if (!impl.details.keyValid(items.getArrayItem(item_number))) { - QTC::TC("qpdf", "NNTree skip invalid key"); + } else if (!impl.details.keyValid(items[item_number])) { impl.warn(node, ("item " + std::to_string(item_number) + " has the wrong type")); } else { - found_valid_key = true; + return; } } } diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov index 6f5fa5c..79ef31b 100644 --- a/qpdf/qpdf.testcov +++ b/qpdf/qpdf.testcov @@ -520,10 +520,7 @@ qpdf-c called qpdf_oh_unparse_binary 0 QPDFWriter getFilterOnWrite false 0 QPDFPageObjectHelper::forEachXObject 3 NNTree skip invalid kid 0 -NNTree skip item at end of short items 0 -NNTree skip invalid key 0 NNTree repair 0 -NNTree increment end() 0 NNTree insertAfter inserts first 0 NNTree erased last kid/item in tree 1 QPDFPageObjectHelper unresolved names 0 -- libgit2 0.21.4