2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-12-22 10:58:58 +00:00

In QPDF::filterCompressedObjects ignore objects not in QPDFWriter tables

Add fuzz case 68377.
This commit is contained in:
m-holger 2024-04-30 10:46:06 +01:00
parent 972cbf103d
commit 60c7d594b8
5 changed files with 22 additions and 11 deletions

View File

@ -114,6 +114,7 @@ set(CORPUS_OTHER
65681.fuzz 65681.fuzz
65773.fuzz 65773.fuzz
65777.fuzz 65777.fuzz
68377.fuzz
) )
set(CORPUS_DIR ${CMAKE_CURRENT_BINARY_DIR}/qpdf_corpus) set(CORPUS_DIR ${CMAKE_CURRENT_BINARY_DIR}/qpdf_corpus)

BIN
fuzz/qpdf_extra/68377.fuzz Normal file

Binary file not shown.

View File

@ -21,7 +21,7 @@ my @fuzzers = (
['pngpredictor' => 1], ['pngpredictor' => 1],
['runlength' => 6], ['runlength' => 6],
['tiffpredictor' => 2], ['tiffpredictor' => 2],
['qpdf' => 56], # increment when adding new files ['qpdf' => 57], # increment when adding new files
); );
my $n_tests = 0; my $n_tests = 0;

View File

@ -416,22 +416,26 @@ QPDF::filterCompressedObjects(QPDFWriter::ObjTable const& obj)
ObjUser const& ou = i1.first; ObjUser const& ou = i1.first;
// Loop over objects. // Loop over objects.
for (auto const& og: i1.second) { for (auto const& og: i1.second) {
if (auto const& i2 = obj[og].object_stream; i2 <= 0) { if (obj.contains(og)) {
t_obj_user_to_objects[ou].insert(og); if (auto const& i2 = obj[og].object_stream; i2 <= 0) {
} else { t_obj_user_to_objects[ou].insert(og);
t_obj_user_to_objects[ou].insert(QPDFObjGen(i2, 0)); } else {
t_obj_user_to_objects[ou].insert(QPDFObjGen(i2, 0));
}
} }
} }
} }
for (auto const& i1: m->object_to_obj_users) { for (auto const& i1: m->object_to_obj_users) {
QPDFObjGen const& og = i1.first; QPDFObjGen const& og = i1.first;
// Loop over obj_users. if (obj.contains(og)) {
for (auto const& ou: i1.second) { // Loop over obj_users.
if (auto i2 = obj[og].object_stream; i2 <= 0) { for (auto const& ou: i1.second) {
t_object_to_obj_users[og].insert(ou); if (auto i2 = obj[og].object_stream; i2 <= 0) {
} else { t_object_to_obj_users[og].insert(ou);
t_object_to_obj_users[QPDFObjGen(i2, 0)].insert(ou); } else {
t_object_to_obj_users[QPDFObjGen(i2, 0)].insert(ou);
}
} }
} }
} }

View File

@ -62,6 +62,12 @@ class ObjTable: public std::vector<T>
return idx < std::vector<T>::size() || sparse_elements.count(idx); return idx < std::vector<T>::size() || sparse_elements.count(idx);
} }
inline bool
contains(QPDFObjGen og) const
{
return contains(static_cast<size_t>(og.getObj()));
}
inline bool inline bool
contains(QPDFObjectHandle oh) const contains(QPDFObjectHandle oh) const
{ {