diff options
author | m-holger <m-holger@kubitscheck.org> | 2022-08-14 02:05:32 +0200 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2022-09-01 18:09:48 +0200 |
commit | 56e9bcabe984acd4479ff7fef9a2a0ca669abc76 (patch) | |
tree | 1367fba1ab799fddc65e615893607f8f7e6cef78 | |
parent | 89061d5b33baa7e8f4e3486d0c7ccf2447500b13 (diff) | |
download | qpdf-56e9bcabe984acd4479ff7fef9a2a0ca669abc76.tar.zst |
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.
-rw-r--r-- | include/qpdf/QPDFObject.hh | 18 | ||||
-rw-r--r-- | libqpdf/QPDF.cc | 3 |
2 files changed, 21 insertions, 0 deletions
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<QPDFObject> 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; |