-
Move methods responsible for loading or keeping track of objects to QPDF_objects.cc. The split was part of the reverted #1297. Reintroducing it now makes it easier/safer to keep the work to refactor the xref and object tables in sync with main.
-
Refactor xref table reconstruction (Fixes #1362)
-
Split reconstruction into three passes - scanning of input for objects and trailer, insertion of objects into the xref table, and loading the trailer. This allows insertion to take place in the usual reverse order and removes the need for a separate insertReconstructedXrefEntry method. It also allows trailer to be tried from most recent to oldest. Ignore any found trailers without /Root entry.
-
Figuring out which classes are part of the public API by using library symbols is fragile (dependent on specific compiler optimizations) and unreliable (misses some inline things). Instead, use castxml, a tool that parses C++ to an abstract syntax tree and generates XML, to get a reliable accounting of public classes and their sizes.
-
Enhance error checking of object stream object ids and offsets
-
The original test file contains multiple entries with id 0 and offset 0. One entry has been modified such that the id is valid (6). Object streams with invalid offsets are a source of unreproduceable oss-fuzz time-outs.
-
and delay to qpdf 13 to give users notice of the change.
-
Push mode is not used by qpdf and is not tested. It is difficult to see a legitimate use for it. Continuing to support it creates unnecessary constraints and effort when adapting the tokenizer.
-
If duplicate keys are encountered, overwrite earlier values with the latest value.
-
Also, move Buffer::Members definition to Buffer.cc
-
This requires a special build option.
-
Use "QPDF" only for the QPDF class itself.
-
Holding release to think about recently discovered incorrect handling of deleted generations. This reverts commit 162716807c475498dfbecc89fd222fb6c45d70c9.