aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-08-25 14:29:24 +0200
committerm-holger <m-holger@kubitscheck.org>2023-08-25 15:06:42 +0200
commitac32dbc313db9490165271d1fa2a602315ddb7e0 (patch)
tree7013d96864e08fe456cb470772a693ca59d14f6f /libqpdf/QPDF.cc
parentad73bbcd90bfac665f43f83131a4d7f913505350 (diff)
downloadqpdf-ac32dbc313db9490165271d1fa2a602315ddb7e0.tar.zst
Reserve foreign /Page objects in QPDF::copyForeignObject
Ensure that links to foreign pages are not broken provided that the page is subsequently copied.
Diffstat (limited to 'libqpdf/QPDF.cc')
-rw-r--r--libqpdf/QPDF.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index 5249b8cb..e39f9b7a 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -2056,11 +2056,6 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier& obj_copier, bool top)
return;
}
- if ((!top) && foreign.isPageObject()) {
- QTC::TC("qpdf", "QPDF not crossing page boundary");
- return;
- }
-
if (foreign.isIndirect()) {
QPDFObjGen foreign_og(foreign.getObjGen());
if (obj_copier.object_map.count(foreign_og) > 0) {
@@ -2075,9 +2070,14 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier& obj_copier, bool top)
}
QTC::TC("qpdf", "QPDF copy indirect");
if (obj_copier.object_map.count(foreign_og) == 0) {
- obj_copier.to_copy.push_back(foreign);
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);
+ return;
+ }
+ obj_copier.to_copy.push_back(foreign);
}
}
@@ -2109,7 +2109,7 @@ QPDF::replaceForeignIndirectObjects(QPDFObjectHandle foreign, ObjCopier& obj_cop
QTC::TC("qpdf", "QPDF replace indirect");
auto mapping = obj_copier.object_map.find(foreign.getObjGen());
if (mapping == obj_copier.object_map.end()) {
- // This case would occur if this is a reference to a Page or Pages object that we didn't
+ // This case would occur if this is a reference to a Pages object that we didn't
// traverse into.
QTC::TC("qpdf", "QPDF replace foreign indirect with null");
result = QPDFObjectHandle::newNull();