Commit e78c1201b587649d7a35241d5d4abeb927c4455c

Authored by m-holger
1 parent 7bbd8b30

Refactor `NNTreeIterator::increment`: simplify loop logic, replace `getArrayNIte…

…ms` and `getArrayItem` with `size` and subscript operators, remove redundant debug traces, and improve readability.
libqpdf/NNTree.cc
@@ -121,21 +121,20 @@ void @@ -121,21 +121,20 @@ void
121 NNTreeIterator::increment(bool backward) 121 NNTreeIterator::increment(bool backward)
122 { 122 {
123 if (item_number < 0) { 123 if (item_number < 0) {
124 - QTC::TC("qpdf", "NNTree increment end()");  
125 deepen(impl.oh, !backward, true); 124 deepen(impl.oh, !backward, true);
126 return; 125 return;
127 } 126 }
128 - bool found_valid_key = false;  
129 - while (valid() && !found_valid_key) { 127 +
  128 + while (valid()) {
130 item_number += backward ? -2 : 2; 129 item_number += backward ? -2 : 2;
131 auto items = node.getKey(impl.details.itemsKey()); 130 auto items = node.getKey(impl.details.itemsKey());
132 - if (item_number < 0 || item_number >= items.getArrayNItems()) { 131 + if (item_number < 0 || std::cmp_greater_equal(item_number, items.size())) {
133 bool found = false; 132 bool found = false;
134 setItemNumber(QPDFObjectHandle(), -1); 133 setItemNumber(QPDFObjectHandle(), -1);
135 while (!(found || path.empty())) { 134 while (!(found || path.empty())) {
136 auto& element = path.back(); 135 auto& element = path.back();
137 auto pe_node = getNextKid(element, backward); 136 auto pe_node = getNextKid(element, backward);
138 - if (pe_node.isNull()) { 137 + if (pe_node.null()) {
139 path.pop_back(); 138 path.pop_back();
140 } else { 139 } else {
141 found = deepen(pe_node, !backward, false); 140 found = deepen(pe_node, !backward, false);
@@ -144,14 +143,12 @@ NNTreeIterator::increment(bool backward) @@ -144,14 +143,12 @@ NNTreeIterator::increment(bool backward)
144 } 143 }
145 if (item_number >= 0) { 144 if (item_number >= 0) {
146 items = node.getKey(impl.details.itemsKey()); 145 items = node.getKey(impl.details.itemsKey());
147 - if (item_number + 1 >= items.getArrayNItems()) {  
148 - QTC::TC("qpdf", "NNTree skip item at end of short items"); 146 + if (std::cmp_greater_equal(item_number + 1, items.size())) {
149 impl.warn(node, "items array doesn't have enough elements"); 147 impl.warn(node, "items array doesn't have enough elements");
150 - } else if (!impl.details.keyValid(items.getArrayItem(item_number))) {  
151 - QTC::TC("qpdf", "NNTree skip invalid key"); 148 + } else if (!impl.details.keyValid(items[item_number])) {
152 impl.warn(node, ("item " + std::to_string(item_number) + " has the wrong type")); 149 impl.warn(node, ("item " + std::to_string(item_number) + " has the wrong type"));
153 } else { 150 } else {
154 - found_valid_key = true; 151 + return;
155 } 152 }
156 } 153 }
157 } 154 }
qpdf/qpdf.testcov
@@ -520,10 +520,7 @@ qpdf-c called qpdf_oh_unparse_binary 0 @@ -520,10 +520,7 @@ qpdf-c called qpdf_oh_unparse_binary 0
520 QPDFWriter getFilterOnWrite false 0 520 QPDFWriter getFilterOnWrite false 0
521 QPDFPageObjectHelper::forEachXObject 3 521 QPDFPageObjectHelper::forEachXObject 3
522 NNTree skip invalid kid 0 522 NNTree skip invalid kid 0
523 -NNTree skip item at end of short items 0  
524 -NNTree skip invalid key 0  
525 NNTree repair 0 523 NNTree repair 0
526 -NNTree increment end() 0  
527 NNTree insertAfter inserts first 0 524 NNTree insertAfter inserts first 0
528 NNTree erased last kid/item in tree 1 525 NNTree erased last kid/item in tree 1
529 QPDFPageObjectHelper unresolved names 0 526 QPDFPageObjectHelper unresolved names 0