From 08d7b56746a93c25db2991403fec7e56cbae132d Mon Sep 17 00:00:00 2001 From: m-holger Date: Tue, 11 Apr 2023 17:16:40 +0100 Subject: [PATCH] Prevent destruction of shared null objects #863 uses a single null object for nulls that were previously implicit. In certain circumstances this shared null object gets destroyed (i.e changed to a QPDF_Destroyed object) when a QPDF object is destroyed. Modify the QPDF destructor so that null objects get disconnected from the dying QPDF object but not destroyed to prevent this from happening. --- libqpdf/QPDF.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 83944be4..c7cc1370 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -247,10 +247,11 @@ QPDF::~QPDF() // but we'll explicitly clear the xref table anyway just to // prevent any possibility of resolve() succeeding. this->m->xref_table.clear(); - auto null_obj = QPDF_Null::create(); for (auto const& iter: this->m->obj_cache) { iter.second.object->disconnect(); - iter.second.object->destroy(); + if (iter.second.object->getTypeCode() != ::ot_null) { + iter.second.object->destroy(); + } } }