From 250a7364828da874fd728808f48443f8cfa5132d Mon Sep 17 00:00:00 2001 From: m-holger Date: Tue, 4 Jul 2023 14:24:30 +0100 Subject: [PATCH] Remove parameter overwrite from QPDF::processXRefStream --- include/qpdf/QPDF.hh | 2 +- libqpdf/QPDF.cc | 34 +++++++++++++--------------------- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/include/qpdf/QPDF.hh b/include/qpdf/QPDF.hh index 6f346422..a23e5826 100644 --- a/include/qpdf/QPDF.hh +++ b/include/qpdf/QPDF.hh @@ -1002,7 +1002,7 @@ class QPDF qpdf_offset_t read_xrefTable(qpdf_offset_t offset); qpdf_offset_t read_xrefStream(qpdf_offset_t offset); qpdf_offset_t processXRefStream(qpdf_offset_t offset, QPDFObjectHandle& xref_stream); - void insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2, bool overwrite = false); + void insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2); void insertReconstructedXrefEntry(int obj, qpdf_offset_t f1, int f2); void setLastObjectDescription(std::string const& description, QPDFObjGen const& og); QPDFObjectHandle readObject( diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 8c96eb9c..e93ffb85 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -1112,31 +1112,23 @@ QPDF::processXRefStream(qpdf_offset_t xref_offset, QPDFObjectHandle& xref_obj) } void -QPDF::insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2, bool overwrite) +QPDF::insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2) { // Populate the xref table in such a way that the first reference to an object that we see, // which is the one in the latest xref table in which it appears, is the one that gets stored. - // This works because we are reading more recent appends before older ones. Exception: if - // overwrite is true, then replace any existing object. This is used in xref recovery mode, - // which reads the file from beginning to end. + // This works because we are reading more recent appends before older ones. // If there is already an entry for this object and generation in the table, it means that a // later xref table has registered this object. Disregard this one. - { // private scope - int gen = (f0 == 2 ? 0 : f2); - QPDFObjGen og(obj, gen); - if (m->xref_table.count(og)) { - if (overwrite) { - m->xref_table.erase(og); - } else { - QTC::TC("qpdf", "QPDF xref reused object"); - return; - } - } - if (m->deleted_objects.count(obj)) { - QTC::TC("qpdf", "QPDF xref deleted object"); - return; - } + + QPDFObjGen og(obj, (f0 == 2 ? 0 : f2)); + if (m->xref_table.count(og)) { + QTC::TC("qpdf", "QPDF xref reused object"); + return; + } + if (m->deleted_objects.count(obj)) { + QTC::TC("qpdf", "QPDF xref deleted object"); + return; } switch (f0) { @@ -1147,11 +1139,11 @@ QPDF::insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2, bool overwrite) case 1: // f2 is generation QTC::TC("qpdf", "QPDF xref gen > 0", ((f2 > 0) ? 1 : 0)); - m->xref_table[QPDFObjGen(obj, f2)] = QPDFXRefEntry(f1); + m->xref_table[og] = QPDFXRefEntry(f1); break; case 2: - m->xref_table[QPDFObjGen(obj, 0)] = QPDFXRefEntry(toI(f1), f2); + m->xref_table[og] = QPDFXRefEntry(toI(f1), f2); break; default: