diff --git a/libqpdf/NNTree.cc b/libqpdf/NNTree.cc index 2257154..6d68575 100644 --- a/libqpdf/NNTree.cc +++ b/libqpdf/NNTree.cc @@ -12,17 +12,17 @@ #include static std::string -get_description(QPDFObjectHandle& node) +get_description(QPDFObjectHandle const& node) { std::string result("Name/Number tree node"); - if (node.isIndirect()) { + if (node.indirect()) { result += " (object " + std::to_string(node.getObjectID()) + ")"; } return result; } void -NNTreeImpl::warn(QPDFObjectHandle& node, std::string const& msg) +NNTreeImpl::warn(QPDFObjectHandle const& node, std::string const& msg) { qpdf.warn(qpdf_e_damaged_pdf, get_description(node), 0, msg); if (++error_count > 5 && qpdf.reconstructed_xref()) { @@ -31,7 +31,7 @@ NNTreeImpl::warn(QPDFObjectHandle& node, std::string const& msg) } void -NNTreeImpl::error(QPDFObjectHandle& node, std::string const& msg) +NNTreeImpl::error(QPDFObjectHandle const& node, std::string const& msg) { throw QPDFExc(qpdf_e_damaged_pdf, qpdf.getFilename(), get_description(node), 0, msg); } @@ -701,22 +701,19 @@ NNTreeImpl::last() } int -NNTreeImpl::withinLimits(QPDFObjectHandle key, QPDFObjectHandle node) +NNTreeImpl::withinLimits(QPDFObjectHandle const& key, QPDFObjectHandle const& node) { - int result = 0; auto limits = node.getKey("/Limits"); - if (limits.isArray() && (limits.getArrayNItems() >= 2) && - details.keyValid(limits.getArrayItem(0)) && details.keyValid(limits.getArrayItem(1))) { - if (details.compareKeys(key, limits.getArrayItem(0)) < 0) { - result = -1; - } else if (details.compareKeys(key, limits.getArrayItem(1)) > 0) { - result = 1; - } - } else { - QTC::TC("qpdf", "NNTree missing limits"); + if (!(limits.size() >= 2 && details.keyValid(limits[0]) && details.keyValid(limits[1]))) { error(node, "node is missing /Limits"); } - return result; + if (details.compareKeys(key, limits[0]) < 0) { + return -1; + } + if (details.compareKeys(key, limits[1]) > 0) { + return 1; + } + return 0; } int diff --git a/libqpdf/qpdf/NNTree.hh b/libqpdf/qpdf/NNTree.hh index c904703..af50bbf 100644 --- a/libqpdf/qpdf/NNTree.hh +++ b/libqpdf/qpdf/NNTree.hh @@ -111,7 +111,7 @@ class NNTreeImpl private: void repair(); iterator findInternal(QPDFObjectHandle const& key, bool return_prev_if_not_found = false); - int withinLimits(QPDFObjectHandle key, QPDFObjectHandle node); + int withinLimits(QPDFObjectHandle const& key, QPDFObjectHandle const& node); int binarySearch( QPDFObjectHandle key, QPDFObjectHandle items, @@ -120,8 +120,8 @@ class NNTreeImpl int (NNTreeImpl::*compare)(QPDFObjectHandle& key, QPDFObjectHandle& arr, int item)); int compareKeyItem(QPDFObjectHandle& key, QPDFObjectHandle& items, int idx); int compareKeyKid(QPDFObjectHandle& key, QPDFObjectHandle& items, int idx); - void warn(QPDFObjectHandle& node, std::string const& msg); - void error(QPDFObjectHandle& node, std::string const& msg); + void warn(QPDFObjectHandle const& node, std::string const& msg); + void error(QPDFObjectHandle const& node, std::string const& msg); NNTreeDetails const& details; QPDF& qpdf; diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov index a12d39a..0af3b37 100644 --- a/qpdf/qpdf.testcov +++ b/qpdf/qpdf.testcov @@ -536,7 +536,6 @@ NNTree split items 0 NNTree split second half item 0 NNTree split parent 0 NNTree split second half kid 0 -NNTree missing limits 0 NNTree node is not a dictionary 0 NNTree limits didn't change 0 NNTree increment end() 0