Commit e78c1201b587649d7a35241d5d4abeb927c4455c
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.
Showing
2 changed files
with
7 additions
and
13 deletions
libqpdf/NNTree.cc
| ... | ... | @@ -121,21 +121,20 @@ void |
| 121 | 121 | NNTreeIterator::increment(bool backward) |
| 122 | 122 | { |
| 123 | 123 | if (item_number < 0) { |
| 124 | - QTC::TC("qpdf", "NNTree increment end()"); | |
| 125 | 124 | deepen(impl.oh, !backward, true); |
| 126 | 125 | return; |
| 127 | 126 | } |
| 128 | - bool found_valid_key = false; | |
| 129 | - while (valid() && !found_valid_key) { | |
| 127 | + | |
| 128 | + while (valid()) { | |
| 130 | 129 | item_number += backward ? -2 : 2; |
| 131 | 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 | 132 | bool found = false; |
| 134 | 133 | setItemNumber(QPDFObjectHandle(), -1); |
| 135 | 134 | while (!(found || path.empty())) { |
| 136 | 135 | auto& element = path.back(); |
| 137 | 136 | auto pe_node = getNextKid(element, backward); |
| 138 | - if (pe_node.isNull()) { | |
| 137 | + if (pe_node.null()) { | |
| 139 | 138 | path.pop_back(); |
| 140 | 139 | } else { |
| 141 | 140 | found = deepen(pe_node, !backward, false); |
| ... | ... | @@ -144,14 +143,12 @@ NNTreeIterator::increment(bool backward) |
| 144 | 143 | } |
| 145 | 144 | if (item_number >= 0) { |
| 146 | 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 | 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 | 149 | impl.warn(node, ("item " + std::to_string(item_number) + " has the wrong type")); |
| 153 | 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 | 520 | QPDFWriter getFilterOnWrite false 0 |
| 521 | 521 | QPDFPageObjectHelper::forEachXObject 3 |
| 522 | 522 | NNTree skip invalid kid 0 |
| 523 | -NNTree skip item at end of short items 0 | |
| 524 | -NNTree skip invalid key 0 | |
| 525 | 523 | NNTree repair 0 |
| 526 | -NNTree increment end() 0 | |
| 527 | 524 | NNTree insertAfter inserts first 0 |
| 528 | 525 | NNTree erased last kid/item in tree 1 |
| 529 | 526 | QPDFPageObjectHelper unresolved names 0 | ... | ... |