From 52539544c46db0262a3bf7a67036c80b08c7f4ac Mon Sep 17 00:00:00 2001 From: m-holger Date: Fri, 25 Aug 2023 12:37:24 +0100 Subject: [PATCH] Modify QPDF::replaceReserved to allow replacing indirect nulls --- include/qpdf/QPDF.hh | 4 ++-- libqpdf/QPDF.cc | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/qpdf/QPDF.hh b/include/qpdf/QPDF.hh index 2ee2bb3..9cfcb2c 100644 --- a/include/qpdf/QPDF.hh +++ b/include/qpdf/QPDF.hh @@ -391,8 +391,8 @@ class QPDF void swapObjects(int objid1, int generation1, int objid2, int generation2); // Replace a reserved object. This is a wrapper around replaceObject but it guarantees that the - // underlying object is a reserved object. After this call, reserved will be a reference to - // replacement. + // underlying object is a reserved object or a null object. After this call, reserved will + // be a reference to replacement. QPDF_DLL void replaceReserved(QPDFObjectHandle reserved, QPDFObjectHandle replacement); diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 45bd184..739ad7c 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -1948,7 +1948,10 @@ void QPDF::replaceReserved(QPDFObjectHandle reserved, QPDFObjectHandle replacement) { QTC::TC("qpdf", "QPDF replaceReserved"); - reserved.assertReserved(); + auto tc = reserved.getTypeCode(); + if (!(tc == ::ot_reserved || tc == ::ot_null)) { + throw std::logic_error("replaceReserved called with non-reserverd object"); + } replaceObject(reserved.getObjGen(), replacement); } -- libgit2 0.21.4