diff options
author | m-holger <m-holger@kubitscheck.org> | 2023-08-25 14:29:24 +0200 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2023-08-25 15:06:42 +0200 |
commit | ac32dbc313db9490165271d1fa2a602315ddb7e0 (patch) | |
tree | 7013d96864e08fe456cb470772a693ca59d14f6f /libqpdf | |
parent | ad73bbcd90bfac665f43f83131a4d7f913505350 (diff) | |
download | qpdf-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')
-rw-r--r-- | libqpdf/QPDF.cc | 14 |
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(); |