From 56e9bcabe984acd4479ff7fef9a2a0ca669abc76 Mon Sep 17 00:00:00 2001 From: m-holger Date: Sun, 14 Aug 2022 01:05:32 +0100 Subject: Add methods QPDFObject::setObjGen and QPDFObject::resetObjGen Also, modify QPDFObject::swapWith to update the ObjGens of the swapped objects. Modify QPDF::newIndirect and QPDF::updateCache to keep object ObjGens up to date. --- include/qpdf/QPDFObject.hh | 18 ++++++++++++++++++ libqpdf/QPDF.cc | 3 +++ 2 files changed, 21 insertions(+) diff --git a/include/qpdf/QPDFObject.hh b/include/qpdf/QPDFObject.hh index 198488dd..7bb7c6e1 100644 --- a/include/qpdf/QPDFObject.hh +++ b/include/qpdf/QPDFObject.hh @@ -133,7 +133,25 @@ class QPDFObject auto v = value; value = o->value; o->value = v; + auto og = value->og; + value->og = o->value->og; + o->value->og = og; } + + // The following two methods are for use by class QPDF only + void + setObjGen(QPDF* qpdf, QPDFObjGen const& og) + { + value->qpdf = qpdf; + value->og = og; + } + void + resetObjGen() + { + value->qpdf = nullptr; + value->og = QPDFObjGen(); + } + bool isUnresolved() { diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index f33e2920..1e73f794 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -2109,6 +2109,7 @@ QPDF::resolveObjectsInStream(int obj_stream_number) QPDFObjectHandle QPDF::newIndirect(QPDFObjGen const& og, std::shared_ptr const& obj) { + obj->setObjGen(this, og); if (!obj->hasDescription()) { obj->setDescription(this, "object " + og.unparse(' ')); } @@ -2122,8 +2123,10 @@ QPDF::updateCache( qpdf_offset_t end_before_space, qpdf_offset_t end_after_space) { + object->setObjGen(this, og); if (isCached(og)) { auto& cache = m->obj_cache[og]; + cache.object->resetObjGen(); cache.object->assign(object); cache.end_before_space = end_before_space; cache.end_after_space = end_after_space; -- cgit v1.2.3-54-g00ecf