diff --git a/include/qpdf/QPDF.hh b/include/qpdf/QPDF.hh index 2ee2bb34..9cfcb2c2 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 45bd1847..739ad7ce 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); }