summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-08-25 13:37:24 +0200
committerm-holger <m-holger@kubitscheck.org>2023-08-25 13:37:24 +0200
commit52539544c46db0262a3bf7a67036c80b08c7f4ac (patch)
treec14591b42198901019fe9ad1f2e1be9c1fe033fa
parent6574dc5c030f866d560dc43cc7a10263ebc71e27 (diff)
downloadqpdf-52539544c46db0262a3bf7a67036c80b08c7f4ac.tar.zst
Modify QPDF::replaceReserved to allow replacing indirect nulls
-rw-r--r--include/qpdf/QPDF.hh4
-rw-r--r--libqpdf/QPDF.cc5
2 files changed, 6 insertions, 3 deletions
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);
}