m-holger
91822ae6a1
Refactor Xref_table::reconstruct
...
Split reconstruction into two passes - scanning of input for objects and
insertion of objects into the xref table. This allows insertion to take
place in the usual reverse order and removes the need for a separate
insert_reconstructed method.
2024-09-18 10:25:38 +01:00
m-holger
39df5936fe
Refactor Xref_table::read_table
...
Rename to Xref_table::process_section.
Process trailer processing subsection entries.
2024-09-18 10:25:38 +01:00
m-holger
ed65619428
Add new methods Xref_table::subsections
...
Calculate all subsections before reading subsection entries.
Duplicates some warnings for the time being.
2024-09-18 10:25:38 +01:00
m-holger
cee8d5c92d
Refactor Xref_table::parse_first
...
Rename to Xref_table::subsection.
Return results instead of using out parameters.
Take on responsibility for throwing exception and calculation of offset of
first subsection entry.
2024-09-18 10:25:38 +01:00
m-holger
0c56cec6c3
Refactor QPDF::createFromJSON
2024-09-18 10:25:38 +01:00
m-holger
88fd7ca99a
Refactor QPDF::emptyPDF
2024-09-18 10:25:38 +01:00
m-holger
39abb11376
Make all QPDF::Xref_table data members private
2024-09-18 10:25:38 +01:00
m-holger
82419ca013
Add new data member QPDF::Xref_table::table
2024-09-18 10:25:38 +01:00
m-holger
742cc7d87b
Add temporary methods QPDF::Xref_table::size and as_map
...
Also, remove redundant clearing of the xref tabl during QPDF destruction.
2024-09-18 10:25:38 +01:00
m-holger
fa03ed3891
Refactor QPDF::removeObject
...
Do not remove object from xref table as this is only required when the
the method is called from within QPDF::Xref_table.
2024-09-18 10:25:38 +01:00
m-holger
5fc257f0f7
Add QPDF::Xref_table methods type, offset, stream_number and stream_index
2024-09-18 10:25:38 +01:00
m-holger
d64b14912d
Move QPDF::readTrailer to QPDF::Xref_table
2024-09-18 10:25:38 +01:00
m-holger
3ddc51a9dc
Move QPDF::resolveXRefTable to QPDF::Xref_table
2024-09-18 10:25:38 +01:00
m-holger
ad4688866d
Add new method QPDF::Xref_table::show
2024-09-18 10:25:38 +01:00
m-holger
1e2dcbf03e
Add QPDF::Xref_table members file and tokenizer
2024-09-18 10:25:38 +01:00
m-holger
b1d845e708
Split QPDF member file into file and file_sp to facilitate aliasing
...
To be encapsulated later.
2024-09-18 10:25:37 +01:00
m-holger
db06e075ea
Move xref table initialisation from QPDF::parse to QPDF::Xref_table
2024-09-18 10:25:37 +01:00
m-holger
a4db9b3149
Move QPDF::read_xref to QPDF::Xref_table
2024-09-18 10:25:37 +01:00
m-holger
f30a5eb05a
Move QPDF::read_xrefStream to QPDF::Xref_table
2024-09-18 10:25:37 +01:00
m-holger
253d3aee8f
Move QPDF::read_xrefEntry to QPDF::Xref_table
2024-09-18 10:25:37 +01:00
m-holger
3fbff84594
Move QPDF::reconstruct_xref to QPDF::Xref_table
...
Also, when recovering trailer from xref streams, pick the last valid
trailer encountered rather than the first.
2024-09-18 10:25:37 +01:00
m-holger
1e072e223a
Move QPDF::insertXrefEntry etc to QPDF::Xref_table
2024-09-18 10:25:37 +01:00
m-holger
0ac37bc956
Add new class QPDF::Xref_table
2024-09-18 10:25:37 +01:00
m-holger
f8e6274a2e
Move QPDF inner class definitions to new QPDF_private.hh
2024-09-18 10:25:37 +01:00
m-holger
8f54319f7a
Merge pull request #1179 from m-holger/null
...
In FUTURE, treat uninitialized object handles as null
2024-09-18 10:22:04 +01:00
m-holger
dcf111a9bc
Apply fuzzer Pl_Flate memory limit only when inflating
...
Fixes fuzz issue 71689.
2024-09-18 00:12:44 +01:00
m-holger
266d479735
Refactor QPDF_Array::at
...
Change the return type to a std::pair<bool, QPDFObjectHandle> in order to
allow a default constructed object handle (which is currently returned to
indicate failure) to become a valid object.
2024-09-17 09:59:00 +01:00
m-holger
0afaaea22a
Deprecate QPDFObjectHandle::isInitialized and remove from library
2024-09-17 09:59:00 +01:00
m-holger
bcf56e5333
Merge pull request #1269 from m-holger/hybrid
...
Fix handling of hybrid reference files in QPDF::read_xrefTable
2024-09-17 09:50:59 +01:00
m-holger
61f7d97b20
Merge pull request #1283 from m-holger/fuzz
...
Fix #1242
2024-09-17 00:19:52 +01:00
m-holger
54ac92eb1d
Merge pull request #1271 from m-holger/rsl
...
Fix QPDF::recoverStreamLength
2024-09-16 20:38:14 +01:00
m-holger
75091093fe
Merge pull request #1280 from m-holger/streams
...
Tidy QPDF_Stream
2024-09-16 19:52:24 +01:00
m-holger
ddfa3a24f0
Merge pull request #1281 from m-holger/input
...
Replace some std::shared_ptr parameters with reference parameters
2024-09-16 17:59:53 +01:00
m-holger
9ba6e070a1
Fix #1242
...
Ensure QPDF m->all_pages and invalid_page_found are reset if
getAllPagesInternal throws an exception.
Fixes fuzz case 71624.
2024-09-16 16:04:43 +01:00
m-holger
5d25aac6c7
In QPDFParser constructor change input parameter to InputSource&
2024-09-05 15:30:32 +01:00
m-holger
258343fcc9
In QPDF::readToken change input parameter to InputSource&
2024-09-05 15:23:28 +01:00
m-holger
20edfb3f91
In QPDF::damagedPDF change input parameter to InputSource&
2024-09-05 15:13:30 +01:00
m-holger
83e0f8da88
Tidy QPDF_Stream
...
1. Make class final
2. Pass og parameter by value
3. Properly initialize qpdf and og
Also, tweak QPDF::replaceObject to allow stream replacement without
violating the requirement that streams must always be indirect objects.
Also, remove QPDF::reserveStream as it does not do what the name implies
and having this as a separate methods does not aid code readability.
2024-09-04 16:00:57 +01:00
m-holger
7777ea84e7
Add new method ObjTable::emplace_back
2024-08-31 21:03:37 +01:00
m-holger
4badc78aea
Remove methods ObjTable::initialize
2024-08-31 15:01:45 +01:00
m-holger
0d08f65cb8
Add new method ObjTable::resize
2024-08-31 14:20:16 +01:00
m-holger
68ac2179bd
In ObjTable change maximum allowable object id to std::vector<T>::max_size()
...
Given that the PDF spec requires the xref table to contain entries for all
object ids <= the maximum id present in a PDF document, max_size is a
qpdf implementation limitation for legitimate object ids.
2024-08-31 12:55:53 +01:00
m-holger
64f9b7b242
Refactor QPDFObjectHandle::getTypeName
2024-08-27 10:39:33 +01:00
m-holger
8ed10d71ea
In qpdf_fuzzer and dct_fuzzer add a scan limit for Pl_DCT
2024-08-25 17:03:26 +01:00
m-holger
ef49291682
In QPDF::readObjectAtOffset fail early on 'expect n n obj'
2024-08-23 14:09:20 +01:00
m-holger
0b3debaf86
Merge pull request #1253 from m-holger/pl_t
...
Refactor Pl_QPDFTokenizer
2024-08-21 18:29:55 +01:00
m-holger
c02cb9a720
Fix QPDF::recoverStreamLength
...
Ensure the the recovered stream end is not part of a different object.
Test file is bad24.pdf with stream 4 'endstream' corrupted.
2024-08-20 15:14:01 +01:00
m-holger
42cd7a98ad
In QPDF::recoverStreamLength mark unreachable code
2024-08-20 12:52:33 +01:00
m-holger
f2228b1f88
Fix handling of hybrid reference files in QPDF::read_xrefTable
...
QPDF::read_xrefTable ignores type 0 entries for objects in a section if an
associates XRefStm has an entry for the same object.
The spec states:
When the conforming reader searches for an object, if an entry is not
found in any given standard cross-reference section, the search shall
proceed to a cross-reference stream specified by the XRefStm entry
before looking in the previous cross-reference section,
If a deleted entry is found in a section, the XRefStm is not searched
according to the standard.
2024-08-16 15:58:55 +01:00
m-holger
0eb29c7357
If Pl_Flate memory limit is exceeded do not attempt 'finish' processing
2024-08-09 11:08:30 +01:00