diff --git a/fuzz/CMakeLists.txt b/fuzz/CMakeLists.txt index 50fa364..c1ce4b7 100644 --- a/fuzz/CMakeLists.txt +++ b/fuzz/CMakeLists.txt @@ -159,6 +159,7 @@ set(CORPUS_OTHER 409905355.fuzz 411312393.fuzz 433311400.fuzz + 4720043549327360.fuzz 5109284021272576.fuzz 6489005569146880.fuzz ) diff --git a/fuzz/qpdf_extra/4720043549327360.fuzz b/fuzz/qpdf_extra/4720043549327360.fuzz new file mode 100644 index 0000000..d3e7090 --- /dev/null +++ b/fuzz/qpdf_extra/4720043549327360.fuzz diff --git a/fuzz/qtest/fuzz.test b/fuzz/qtest/fuzz.test index 6324466..2fee3de 100644 --- a/fuzz/qtest/fuzz.test +++ b/fuzz/qtest/fuzz.test @@ -11,7 +11,7 @@ my $td = new TestDriver('fuzz'); my $qpdf_corpus = $ENV{'QPDF_FUZZ_CORPUS'} || die "must set QPDF_FUZZ_CORPUS"; -my $n_qpdf_files = 98; # increment when adding new files +my $n_qpdf_files = 99; # increment when adding new files my @fuzzers = ( ['ascii85' => 1], diff --git a/libqpdf/NNTree.cc b/libqpdf/NNTree.cc index 9506103..45faeaf 100644 --- a/libqpdf/NNTree.cc +++ b/libqpdf/NNTree.cc @@ -139,6 +139,8 @@ NNTreeIterator::increment(bool backward) impl.warn(node, "items array doesn't have enough elements"); } else if (!impl.details.keyValid(items[item_number])) { impl.warn(node, ("item " + std::to_string(item_number) + " has the wrong type")); + } else if (!items[item_number + 1]) { + impl.warn(node, "item " + std::to_string(item_number) + " is null"); } else { return; } @@ -734,8 +736,12 @@ NNTreeImpl::repair() auto new_node = QPDFObjectHandle::newDictionary(); new_node.replaceKey(details.itemsKey(), Array()); NNTreeImpl repl(details, qpdf, new_node, false); - for (auto const& i: *this) { - repl.insert(i.first, i.second); + for (auto const& [key, value]: *this) { +// if (key && value) { + repl.insert(key, value); +// } else { +// std::cerr << key.unparse() << "\n"; +// } } oh.replaceKey("/Kids", new_node.getKey("/Kids")); oh.replaceKey(details.itemsKey(), new_node.getKey(details.itemsKey()));