diff options
author | Jay Berkenbilt <jberkenbilt@users.noreply.github.com> | 2023-09-05 19:37:10 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-05 19:37:10 +0200 |
commit | 105093ae1896120035170014d17ad63f82ffa6fe (patch) | |
tree | 596da26a116fb6507c97c9f2d3186cd637d0aa55 /libqpdf/QPDF.cc | |
parent | 8fac58cd3b544a5bf022f6ea1759120d03f43b63 (diff) | |
parent | fb504ce913b49399b7a1243dc53bc2dd6977fae8 (diff) | |
download | qpdf-105093ae1896120035170014d17ad63f82ffa6fe.tar.zst |
Merge pull request #1035 from m-holger/fix
Fix #1028
Diffstat (limited to 'libqpdf/QPDF.cc')
-rw-r--r-- | libqpdf/QPDF.cc | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 9027c7fd..bd591a51 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -2058,27 +2058,27 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier& obj_copier, bool top) if (foreign.isIndirect()) { QPDFObjGen foreign_og(foreign.getObjGen()); - if (obj_copier.object_map.count(foreign_og) > 0) { - QTC::TC("qpdf", "QPDF already reserved object"); - if (obj_copier.visiting.count(foreign_og)) { - QTC::TC("qpdf", "QPDF loop reserving objects"); - } - return; - } if (!obj_copier.visiting.add(foreign_og)) { + QTC::TC("qpdf", "QPDF loop reserving objects"); return; } - QTC::TC("qpdf", "QPDF copy indirect"); - if (obj_copier.object_map.count(foreign_og) == 0) { + if (obj_copier.object_map.count(foreign_og) > 0) { + QTC::TC("qpdf", "QPDF already reserved object"); + if (!(top && foreign.isPageObject() && obj_copier.object_map[foreign_og].isNull())) { + obj_copier.visiting.erase(foreign); + return; + } + } else { + QTC::TC("qpdf", "QPDF copy indirect"); obj_copier.object_map[foreign_og] = foreign.isStream() ? newStream() : newIndirectNull(); if ((!top) && foreign.isPageObject()) { QTC::TC("qpdf", "QPDF not crossing page boundary"); - obj_copier.visiting.erase(foreign); + obj_copier.visiting.erase(foreign_og); return; } - obj_copier.to_copy.push_back(foreign); } + obj_copier.to_copy.push_back(foreign); } if (foreign_tc == ::ot_array) { |