Commit 800e89de583c45d8c116133bbfc2e7cf52942d49
Committed by
GitHub
Merge pull request #1527 from m-holger/fuzz
Improve null key/value handling in `NNTree`, add checks across insert…
Showing
1 changed file
with
9 additions
and
5 deletions
libqpdf/NNTree.cc
| ... | ... | @@ -106,7 +106,7 @@ NNTreeIterator::getNextKid(PathElement& pe, bool backward) |
| 106 | 106 | bool |
| 107 | 107 | NNTreeIterator::valid() const |
| 108 | 108 | { |
| 109 | - return item_number >= 0; | |
| 109 | + return item_number >= 0 && ivalue.first && ivalue.second; | |
| 110 | 110 | } |
| 111 | 111 | |
| 112 | 112 | void |
| ... | ... | @@ -381,6 +381,9 @@ NNTreeIterator::insertAfter(QPDFObjectHandle const& key, QPDFObjectHandle const& |
| 381 | 381 | if (std::cmp_less(items.size(), item_number + 2)) { |
| 382 | 382 | impl.error(node, "insert: items array is too short"); |
| 383 | 383 | } |
| 384 | + if (!(key && value)) { | |
| 385 | + impl.error(node, "insert: key or value is null"); | |
| 386 | + } | |
| 384 | 387 | items.insert(item_number + 2, key); |
| 385 | 388 | items.insert(item_number + 3, value); |
| 386 | 389 | resetLimits(node, lastPathElement()); |
| ... | ... | @@ -737,11 +740,9 @@ NNTreeImpl::repair() |
| 737 | 740 | new_node.replaceKey(details.itemsKey(), Array()); |
| 738 | 741 | NNTreeImpl repl(details, qpdf, new_node, false); |
| 739 | 742 | for (auto const& [key, value]: *this) { |
| 740 | -// if (key && value) { | |
| 743 | + if (key && value) { | |
| 741 | 744 | repl.insert(key, value); |
| 742 | -// } else { | |
| 743 | -// std::cerr << key.unparse() << "\n"; | |
| 744 | -// } | |
| 745 | + } | |
| 745 | 746 | } |
| 746 | 747 | oh.replaceKey("/Kids", new_node.getKey("/Kids")); |
| 747 | 748 | oh.replaceKey(details.itemsKey(), new_node.getKey(details.itemsKey())); |
| ... | ... | @@ -824,6 +825,9 @@ NNTreeImpl::insertFirst(QPDFObjectHandle const& key, QPDFObjectHandle const& val |
| 824 | 825 | if (!items) { |
| 825 | 826 | error(oh, "unable to find a valid items node"); |
| 826 | 827 | } |
| 828 | + if (!(key && value)) { | |
| 829 | + error(oh, "unable to insert null key or value"); | |
| 830 | + } | |
| 827 | 831 | items.insert(0, key); |
| 828 | 832 | items.insert(1, value); |
| 829 | 833 | iter.setItemNumber(iter.node, 0); | ... | ... |