Commit 52539544c46db0262a3bf7a67036c80b08c7f4ac

Authored by m-holger
1 parent 6574dc5c

Modify QPDF::replaceReserved to allow replacing indirect nulls

include/qpdf/QPDF.hh
@@ -391,8 +391,8 @@ class QPDF @@ -391,8 +391,8 @@ class QPDF
391 void swapObjects(int objid1, int generation1, int objid2, int generation2); 391 void swapObjects(int objid1, int generation1, int objid2, int generation2);
392 392
393 // Replace a reserved object. This is a wrapper around replaceObject but it guarantees that the 393 // Replace a reserved object. This is a wrapper around replaceObject but it guarantees that the
394 - // underlying object is a reserved object. After this call, reserved will be a reference to  
395 - // replacement. 394 + // underlying object is a reserved object or a null object. After this call, reserved will
  395 + // be a reference to replacement.
396 QPDF_DLL 396 QPDF_DLL
397 void replaceReserved(QPDFObjectHandle reserved, QPDFObjectHandle replacement); 397 void replaceReserved(QPDFObjectHandle reserved, QPDFObjectHandle replacement);
398 398
libqpdf/QPDF.cc
@@ -1948,7 +1948,10 @@ void @@ -1948,7 +1948,10 @@ void
1948 QPDF::replaceReserved(QPDFObjectHandle reserved, QPDFObjectHandle replacement) 1948 QPDF::replaceReserved(QPDFObjectHandle reserved, QPDFObjectHandle replacement)
1949 { 1949 {
1950 QTC::TC("qpdf", "QPDF replaceReserved"); 1950 QTC::TC("qpdf", "QPDF replaceReserved");
1951 - reserved.assertReserved(); 1951 + auto tc = reserved.getTypeCode();
  1952 + if (!(tc == ::ot_reserved || tc == ::ot_null)) {
  1953 + throw std::logic_error("replaceReserved called with non-reserverd object");
  1954 + }
1952 replaceObject(reserved.getObjGen(), replacement); 1955 replaceObject(reserved.getObjGen(), replacement);
1953 } 1956 }
1954 1957