Commit 0e81ffa7b69a97ddbc04eb7b2bbc17433bfd3cb2

Authored by m-holger
1 parent 9b080172

Use QPDFObjGen::set in NNTree

Showing 1 changed file with 13 additions and 20 deletions
libqpdf/NNTree.cc
... ... @@ -638,26 +638,21 @@ NNTreeIterator::deepen(QPDFObjectHandle node, bool first, bool allow_empty)
638 638 auto opath = this->path;
639 639 bool failed = false;
640 640  
641   - std::set<QPDFObjGen> seen;
  641 + QPDFObjGen::set seen;
642 642 for (auto i: this->path) {
643   - if (i.node.isIndirect()) {
644   - seen.insert(i.node.getObjGen());
645   - }
  643 + seen.add(i.node);
646 644 }
647 645 while (!failed) {
648   - if (node.isIndirect()) {
649   - auto og = node.getObjGen();
650   - if (seen.count(og)) {
651   - QTC::TC("qpdf", "NNTree deepen: loop");
652   - warn(
653   - impl.qpdf,
654   - node,
655   - "loop detected while traversing name/number tree");
656   - failed = true;
657   - break;
658   - }
659   - seen.insert(og);
  646 + if (!seen.add(node)) {
  647 + QTC::TC("qpdf", "NNTree deepen: loop");
  648 + warn(
  649 + impl.qpdf,
  650 + node,
  651 + "loop detected while traversing name/number tree");
  652 + failed = true;
  653 + break;
660 654 }
  655 +
661 656 if (!node.isDictionary()) {
662 657 QTC::TC("qpdf", "NNTree node is not a dictionary");
663 658 warn(
... ... @@ -928,17 +923,15 @@ NNTreeImpl::findInternal(QPDFObjectHandle key, bool return_prev_if_not_found)
928 923 }
929 924 }
930 925  
931   - std::set<QPDFObjGen> seen;
  926 + QPDFObjGen::set seen;
932 927 auto node = this->oh;
933 928 iterator result(*this);
934 929  
935 930 while (true) {
936   - auto og = node.getObjGen();
937   - if (seen.count(og)) {
  931 + if (!seen.add(node)) {
938 932 QTC::TC("qpdf", "NNTree loop in find");
939 933 error(qpdf, node, "loop detected in find");
940 934 }
941   - seen.insert(og);
942 935  
943 936 auto kids = node.getKey("/Kids");
944 937 int nkids = kids.isArray() ? kids.getArrayNItems() : 0;
... ...