aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/NNTree.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <jberkenbilt@users.noreply.github.com>2023-05-20 20:09:49 +0200
committerGitHub <noreply@github.com>2023-05-20 20:09:49 +0200
commita85635b839755765713eb27d767f42b357056b2e (patch)
tree369b4e49b78e54e04a0409b774a659206017addd /libqpdf/NNTree.cc
parentfd17c8e3fe38a56abf50ce0edec1cde48d4f74cb (diff)
parent50bc82b4e035853bd06a9935722d6b5aec902133 (diff)
downloadqpdf-a85635b839755765713eb27d767f42b357056b2e.tar.zst
Merge pull request #929 from m-holger/ogguard
Add new convenience class QPDFObjGen::Guard
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;