aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-08-02 17:20:24 +0200
committerm-holger <m-holger@kubitscheck.org>2022-08-31 23:47:11 +0200
commit2a2eebcaea2b27bc86390dac2ee27ad5620f5eda (patch)
tree3bc8a88d4349bee6275d9f36dd65e8af7773cc2f /libqpdf
parent16841bec32bb4323a60699cf42f0d74ef495b73f (diff)
downloadqpdf-2a2eebcaea2b27bc86390dac2ee27ad5620f5eda.tar.zst
Modify newIndirect to set QPDFObjectHandle::obj
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDF.cc23
-rw-r--r--libqpdf/QPDFObjectHandle.cc15
2 files changed, 22 insertions, 16 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index 7b357b13..191d98f3 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -1463,8 +1463,7 @@ QPDF::getAllObjects()
fixDanglingReferences(true);
std::vector<QPDFObjectHandle> result;
for (auto const& iter: this->m->obj_cache) {
- QPDFObjGen const& og = iter.first;
- result.push_back(getObjectByObjGen(og));
+ result.push_back(newIndirect(iter.first, iter.second.object));
}
return result;
}
@@ -2129,6 +2128,15 @@ QPDF::resolveObjectsInStream(int obj_stream_number)
}
QPDFObjectHandle
+QPDF::newIndirect(QPDFObjGen const& og, std::shared_ptr<QPDFObject> const& obj)
+{
+ if (!obj->hasDescription()) {
+ obj->setDescription(this, "object " + og.unparse(' '));
+ }
+ return QPDFObjectHandle::Factory::newIndirect(this, og, obj);
+}
+
+QPDFObjectHandle
QPDF::makeIndirectObject(QPDFObjectHandle oh)
{
int max_objid = toI(getObjectCount());
@@ -2137,9 +2145,9 @@ QPDF::makeIndirectObject(QPDFObjectHandle oh)
"max object id is too high to create new objects");
}
QPDFObjGen next(max_objid + 1, 0);
- this->m->obj_cache[next] =
+ m->obj_cache[next] =
ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1);
- return QPDFObjectHandle::Factory::newIndirect(this, next);
+ return newIndirect(next, m->obj_cache[next].object);
}
QPDFObjectHandle
@@ -2148,8 +2156,10 @@ QPDF::reserveObjectIfNotExists(QPDFObjGen const& og)
if ((!m->obj_cache.count(og)) && (!m->xref_table.count(og))) {
resolve(og);
m->obj_cache[og].object = QPDF_Reserved::create();
+ return newIndirect(og, m->obj_cache[og].object);
+ } else {
+ return getObject(og);
}
- return getObject(og);
}
QPDFObjectHandle
@@ -2162,7 +2172,8 @@ QPDF::reserveStream(QPDFObjGen const& og)
QPDFObjectHandle
QPDF::getObject(QPDFObjGen const& og)
{
- return QPDFObjectHandle::Factory::newIndirect(this, og);
+ auto obj = (og.getObj() != 0) ? resolve(og) : QPDF_Null::create();
+ return newIndirect(og, obj);
}
QPDFObjectHandle
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index 8c98c87b..f872e984 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -21,6 +21,7 @@
#include <qpdf/QPDF_Reserved.hh>
#include <qpdf/QPDF_Stream.hh>
#include <qpdf/QPDF_String.hh>
+#include <qpdf/QPDF_Unresolved.hh>
#include <qpdf/SparseOHArray.hh>
#include <qpdf/QIntC.hh>
@@ -240,13 +241,6 @@ QPDFObjectHandle::QPDFObjectHandle() :
{
}
-QPDFObjectHandle::QPDFObjectHandle(QPDF* qpdf, QPDFObjGen const& og) :
- initialized(true),
- qpdf(qpdf),
- og(og)
-{
-}
-
QPDFObjectHandle::QPDFObjectHandle(std::shared_ptr<QPDFObject> const& data) :
initialized(true),
qpdf(nullptr),
@@ -1953,7 +1947,7 @@ QPDFObjectHandle::newIndirect(QPDF* qpdf, QPDFObjGen const& og)
return newNull();
}
- return QPDFObjectHandle(qpdf, og);
+ return QPDFObjectHandle(qpdf, og, QPDF_Unresolved::create());
}
QPDFObjectHandle
@@ -2553,10 +2547,11 @@ QPDFObjectHandle::dereference()
if (!this->initialized) {
return false;
}
- if (this->obj() == nullptr ||
+ if ((this->obj->getTypeCode() == QPDFObject::ot_unresolved) ||
(getObjectID() &&
QPDF::Resolver::objectChanged(this->qpdf, getObjGen(), this->obj))) {
- obj = QPDF::Resolver::resolve(this->qpdf, getObjGen());
+ this->obj = QPDF::Resolver::resolve(this->qpdf, getObjGen());
+
}
return true;
}