aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-09-05 14:34:03 +0200
committerm-holger <m-holger@kubitscheck.org>2023-09-05 18:22:34 +0200
commitfb504ce913b49399b7a1243dc53bc2dd6977fae8 (patch)
tree596da26a116fb6507c97c9f2d3186cd637d0aa55 /libqpdf/QPDF.cc
parent8fac58cd3b544a5bf022f6ea1759120d03f43b63 (diff)
downloadqpdf-fb504ce913b49399b7a1243dc53bc2dd6977fae8.tar.zst
Fix #1028
Diffstat (limited to 'libqpdf/QPDF.cc')
-rw-r--r--libqpdf/QPDF.cc22
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) {