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,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 |