aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/NNTree.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-01-05 12:35:44 +0100
committerm-holger <m-holger@kubitscheck.org>2023-05-19 17:58:04 +0200
commit0e81ffa7b69a97ddbc04eb7b2bbc17433bfd3cb2 (patch)
treea9b26d170541663f044d6fa0d29cdeed57fd30bf /libqpdf/NNTree.cc
parent9b0801721710093102c64068b6c643c8fcd7f5db (diff)
downloadqpdf-0e81ffa7b69a97ddbc04eb7b2bbc17433bfd3cb2.tar.zst
Use QPDFObjGen::set in NNTree
Diffstat (limited to 'libqpdf/NNTree.cc')
-rw-r--r--libqpdf/NNTree.cc33
1 files changed, 13 insertions, 20 deletions
diff --git a/libqpdf/NNTree.cc b/libqpdf/NNTree.cc
index dbcdc1f9..6b15a1cf 100644
--- a/libqpdf/NNTree.cc
+++ b/libqpdf/NNTree.cc
@@ -638,26 +638,21 @@ NNTreeIterator::deepen(QPDFObjectHandle node, bool first, bool allow_empty)
auto opath = this->path;
bool failed = false;
- std::set<QPDFObjGen> seen;
+ QPDFObjGen::set seen;
for (auto i: this->path) {
- if (i.node.isIndirect()) {
- seen.insert(i.node.getObjGen());
- }
+ seen.add(i.node);
}
while (!failed) {
- if (node.isIndirect()) {
- auto og = node.getObjGen();
- if (seen.count(og)) {
- QTC::TC("qpdf", "NNTree deepen: loop");
- warn(
- impl.qpdf,
- node,
- "loop detected while traversing name/number tree");
- failed = true;
- break;
- }
- seen.insert(og);
+ if (!seen.add(node)) {
+ QTC::TC("qpdf", "NNTree deepen: loop");
+ warn(
+ impl.qpdf,
+ node,
+ "loop detected while traversing name/number tree");
+ failed = true;
+ break;
}
+
if (!node.isDictionary()) {
QTC::TC("qpdf", "NNTree node is not a dictionary");
warn(
@@ -928,17 +923,15 @@ NNTreeImpl::findInternal(QPDFObjectHandle key, bool return_prev_if_not_found)
}
}
- std::set<QPDFObjGen> seen;
+ QPDFObjGen::set seen;
auto node = this->oh;
iterator result(*this);
while (true) {
- auto og = node.getObjGen();
- if (seen.count(og)) {
+ if (!seen.add(node)) {
QTC::TC("qpdf", "NNTree loop in find");
error(qpdf, node, "loop detected in find");
}
- seen.insert(og);
auto kids = node.getKey("/Kids");
int nkids = kids.isArray() ? kids.getArrayNItems() : 0;