Commit baa77f54f1870f346b4299edcc91b7446091158c
1 parent
26de2d5c
Refactor `NNTreeImpl::withinLimits`: use `const` references for parameters, simp…
…lify `withinLimits` logic, and improve code readability with subscript operators.
Showing
3 changed files
with
16 additions
and
20 deletions
libqpdf/NNTree.cc
| ... | ... | @@ -12,17 +12,17 @@ |
| 12 | 12 | #include <utility> |
| 13 | 13 | |
| 14 | 14 | static std::string |
| 15 | -get_description(QPDFObjectHandle& node) | |
| 15 | +get_description(QPDFObjectHandle const& node) | |
| 16 | 16 | { |
| 17 | 17 | std::string result("Name/Number tree node"); |
| 18 | - if (node.isIndirect()) { | |
| 18 | + if (node.indirect()) { | |
| 19 | 19 | result += " (object " + std::to_string(node.getObjectID()) + ")"; |
| 20 | 20 | } |
| 21 | 21 | return result; |
| 22 | 22 | } |
| 23 | 23 | |
| 24 | 24 | void |
| 25 | -NNTreeImpl::warn(QPDFObjectHandle& node, std::string const& msg) | |
| 25 | +NNTreeImpl::warn(QPDFObjectHandle const& node, std::string const& msg) | |
| 26 | 26 | { |
| 27 | 27 | qpdf.warn(qpdf_e_damaged_pdf, get_description(node), 0, msg); |
| 28 | 28 | if (++error_count > 5 && qpdf.reconstructed_xref()) { |
| ... | ... | @@ -31,7 +31,7 @@ NNTreeImpl::warn(QPDFObjectHandle& node, std::string const& msg) |
| 31 | 31 | } |
| 32 | 32 | |
| 33 | 33 | void |
| 34 | -NNTreeImpl::error(QPDFObjectHandle& node, std::string const& msg) | |
| 34 | +NNTreeImpl::error(QPDFObjectHandle const& node, std::string const& msg) | |
| 35 | 35 | { |
| 36 | 36 | throw QPDFExc(qpdf_e_damaged_pdf, qpdf.getFilename(), get_description(node), 0, msg); |
| 37 | 37 | } |
| ... | ... | @@ -701,22 +701,19 @@ NNTreeImpl::last() |
| 701 | 701 | } |
| 702 | 702 | |
| 703 | 703 | int |
| 704 | -NNTreeImpl::withinLimits(QPDFObjectHandle key, QPDFObjectHandle node) | |
| 704 | +NNTreeImpl::withinLimits(QPDFObjectHandle const& key, QPDFObjectHandle const& node) | |
| 705 | 705 | { |
| 706 | - int result = 0; | |
| 707 | 706 | auto limits = node.getKey("/Limits"); |
| 708 | - if (limits.isArray() && (limits.getArrayNItems() >= 2) && | |
| 709 | - details.keyValid(limits.getArrayItem(0)) && details.keyValid(limits.getArrayItem(1))) { | |
| 710 | - if (details.compareKeys(key, limits.getArrayItem(0)) < 0) { | |
| 711 | - result = -1; | |
| 712 | - } else if (details.compareKeys(key, limits.getArrayItem(1)) > 0) { | |
| 713 | - result = 1; | |
| 714 | - } | |
| 715 | - } else { | |
| 716 | - QTC::TC("qpdf", "NNTree missing limits"); | |
| 707 | + if (!(limits.size() >= 2 && details.keyValid(limits[0]) && details.keyValid(limits[1]))) { | |
| 717 | 708 | error(node, "node is missing /Limits"); |
| 718 | 709 | } |
| 719 | - return result; | |
| 710 | + if (details.compareKeys(key, limits[0]) < 0) { | |
| 711 | + return -1; | |
| 712 | + } | |
| 713 | + if (details.compareKeys(key, limits[1]) > 0) { | |
| 714 | + return 1; | |
| 715 | + } | |
| 716 | + return 0; | |
| 720 | 717 | } |
| 721 | 718 | |
| 722 | 719 | int | ... | ... |
libqpdf/qpdf/NNTree.hh
| ... | ... | @@ -111,7 +111,7 @@ class NNTreeImpl |
| 111 | 111 | private: |
| 112 | 112 | void repair(); |
| 113 | 113 | iterator findInternal(QPDFObjectHandle const& key, bool return_prev_if_not_found = false); |
| 114 | - int withinLimits(QPDFObjectHandle key, QPDFObjectHandle node); | |
| 114 | + int withinLimits(QPDFObjectHandle const& key, QPDFObjectHandle const& node); | |
| 115 | 115 | int binarySearch( |
| 116 | 116 | QPDFObjectHandle key, |
| 117 | 117 | QPDFObjectHandle items, |
| ... | ... | @@ -120,8 +120,8 @@ class NNTreeImpl |
| 120 | 120 | int (NNTreeImpl::*compare)(QPDFObjectHandle& key, QPDFObjectHandle& arr, int item)); |
| 121 | 121 | int compareKeyItem(QPDFObjectHandle& key, QPDFObjectHandle& items, int idx); |
| 122 | 122 | int compareKeyKid(QPDFObjectHandle& key, QPDFObjectHandle& items, int idx); |
| 123 | - void warn(QPDFObjectHandle& node, std::string const& msg); | |
| 124 | - void error(QPDFObjectHandle& node, std::string const& msg); | |
| 123 | + void warn(QPDFObjectHandle const& node, std::string const& msg); | |
| 124 | + void error(QPDFObjectHandle const& node, std::string const& msg); | |
| 125 | 125 | |
| 126 | 126 | NNTreeDetails const& details; |
| 127 | 127 | QPDF& qpdf; | ... | ... |
qpdf/qpdf.testcov
| ... | ... | @@ -536,7 +536,6 @@ NNTree split items 0 |
| 536 | 536 | NNTree split second half item 0 |
| 537 | 537 | NNTree split parent 0 |
| 538 | 538 | NNTree split second half kid 0 |
| 539 | -NNTree missing limits 0 | |
| 540 | 539 | NNTree node is not a dictionary 0 |
| 541 | 540 | NNTree limits didn't change 0 |
| 542 | 541 | NNTree increment end() 0 | ... | ... |