Commit 1674b67cd117d740976b02dbf37b2d36cb653325

Authored by m-holger
1 parent 13d55d88

Refactor `NNTreeIterator::updateIValue`: replace `getArrayNItems` and `getArrayI…

…tem` with `size` and subscript operators, simplify logic, and improve error handling.
Showing 1 changed file with 8 additions and 12 deletions
libqpdf/NNTree.cc
@@ -57,25 +57,21 @@ NNTreeIterator::updateIValue(bool allow_invalid) @@ -57,25 +57,21 @@ NNTreeIterator::updateIValue(bool allow_invalid)
57 // we must call updateIValue as well. These cases are handled, and for good measure, we also 57 // we must call updateIValue as well. These cases are handled, and for good measure, we also
58 // call updateIValue in operator* and operator->. 58 // call updateIValue in operator* and operator->.
59 59
60 - bool okay = false;  
61 - if (item_number >= 0 && node.isDictionary()) {  
62 - auto items = node.getKey(impl.details.itemsKey());  
63 - if (item_number + 1 < items.getArrayNItems()) {  
64 - okay = true;  
65 - ivalue.first = items.getArrayItem(item_number);  
66 - ivalue.second = items.getArrayItem(1 + item_number);  
67 - } else {  
68 - impl.error(node, "update ivalue: items array is too short");  
69 - }  
70 - }  
71 - if (!okay) { 60 + if (item_number < 0 || !node.isDictionary()) {
72 if (!allow_invalid) { 61 if (!allow_invalid) {
73 throw std::logic_error( 62 throw std::logic_error(
74 "attempt made to dereference an invalid name/number tree iterator"); 63 "attempt made to dereference an invalid name/number tree iterator");
75 } 64 }
76 ivalue.first = QPDFObjectHandle(); 65 ivalue.first = QPDFObjectHandle();
77 ivalue.second = QPDFObjectHandle(); 66 ivalue.second = QPDFObjectHandle();
  67 + return;
  68 + }
  69 + auto items = node.getKey(impl.details.itemsKey());
  70 + if (!std::cmp_less(item_number + 1, items.size())) {
  71 + impl.error(node, "update ivalue: items array is too short");
78 } 72 }
  73 + ivalue.first = items[item_number];
  74 + ivalue.second = items[1 + item_number];
79 } 75 }
80 76
81 NNTreeIterator::PathElement::PathElement(QPDFObjectHandle const& node, int kid_number) : 77 NNTreeIterator::PathElement::PathElement(QPDFObjectHandle const& node, int kid_number) :