Commit 059d9a9b1180acf7a0e37c6fd7a42e92697da465
Committed by
GitHub
Merge pull request #1525 from m-holger/fuzz
Validate existence of array items in `NNTree`, improve null handling,…
Showing
4 changed files
with
10 additions
and
3 deletions
fuzz/CMakeLists.txt
fuzz/qpdf_extra/4720043549327360.fuzz
0 → 100644
No preview for this file type
fuzz/qtest/fuzz.test
| ... | ... | @@ -11,7 +11,7 @@ my $td = new TestDriver('fuzz'); |
| 11 | 11 | |
| 12 | 12 | my $qpdf_corpus = $ENV{'QPDF_FUZZ_CORPUS'} || die "must set QPDF_FUZZ_CORPUS"; |
| 13 | 13 | |
| 14 | -my $n_qpdf_files = 98; # increment when adding new files | |
| 14 | +my $n_qpdf_files = 99; # increment when adding new files | |
| 15 | 15 | |
| 16 | 16 | my @fuzzers = ( |
| 17 | 17 | ['ascii85' => 1], | ... | ... |
libqpdf/NNTree.cc
| ... | ... | @@ -139,6 +139,8 @@ NNTreeIterator::increment(bool backward) |
| 139 | 139 | impl.warn(node, "items array doesn't have enough elements"); |
| 140 | 140 | } else if (!impl.details.keyValid(items[item_number])) { |
| 141 | 141 | impl.warn(node, ("item " + std::to_string(item_number) + " has the wrong type")); |
| 142 | + } else if (!items[item_number + 1]) { | |
| 143 | + impl.warn(node, "item " + std::to_string(item_number) + " is null"); | |
| 142 | 144 | } else { |
| 143 | 145 | return; |
| 144 | 146 | } |
| ... | ... | @@ -734,8 +736,12 @@ NNTreeImpl::repair() |
| 734 | 736 | auto new_node = QPDFObjectHandle::newDictionary(); |
| 735 | 737 | new_node.replaceKey(details.itemsKey(), Array()); |
| 736 | 738 | NNTreeImpl repl(details, qpdf, new_node, false); |
| 737 | - for (auto const& i: *this) { | |
| 738 | - repl.insert(i.first, i.second); | |
| 739 | + for (auto const& [key, value]: *this) { | |
| 740 | +// if (key && value) { | |
| 741 | + repl.insert(key, value); | |
| 742 | +// } else { | |
| 743 | +// std::cerr << key.unparse() << "\n"; | |
| 744 | +// } | |
| 739 | 745 | } |
| 740 | 746 | oh.replaceKey("/Kids", new_node.getKey("/Kids")); |
| 741 | 747 | oh.replaceKey(details.itemsKey(), new_node.getKey(details.itemsKey())); | ... | ... |