aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFParser.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-12-19 15:52:32 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2022-12-31 20:37:35 +0100
commit83910224167a7087e219d3ab2613826b692d75d4 (patch)
treeeb30d2cdae9f259c14fe5de5c4f8f9bd31d2b49c /libqpdf/QPDFParser.cc
parent9da50ca3601ee58c2ccceaa5d430b56a1ab27306 (diff)
downloadqpdf-83910224167a7087e219d3ab2613826b692d75d4.tar.zst
Avoid inserting direct null objects into olist
Diffstat (limited to 'libqpdf/QPDFParser.cc')
-rw-r--r--libqpdf/QPDFParser.cc17
1 files changed, 10 insertions, 7 deletions
diff --git a/libqpdf/QPDFParser.cc b/libqpdf/QPDFParser.cc
index 6b3cdb4e..30888911 100644
--- a/libqpdf/QPDFParser.cc
+++ b/libqpdf/QPDFParser.cc
@@ -308,7 +308,7 @@ QPDFParser::parse(bool& empty, bool content_stream)
setDescription(object, input->getLastOffset());
}
set_offset = true;
- olist.push_back(is_null ? null_oh : object);
+ olist.push_back(object);
break;
case st_top:
@@ -339,16 +339,19 @@ QPDFParser::parse(bool& empty, bool content_stream)
// Convert list to map. Alternating elements are keys. Attempt
// to recover more or less gracefully from invalid dictionaries.
std::set<std::string> names;
- size_t n_elements = olist.size();
- for (size_t i = 0; i < n_elements; ++i) {
- QPDFObjectHandle oh = olist.at(i);
- if ((!oh.isIndirect()) && oh.isName()) {
- names.insert(oh.getName());
+ for (auto& obj: olist) {
+ if (obj) {
+ if (obj->getTypeCode() == ::ot_name) {
+ names.insert(obj->getStringValue());
+ }
+ } else {
+ obj = null_oh;
}
}
std::map<std::string, QPDFObjectHandle> dict;
int next_fake_key = 1;
+ size_t n_elements = olist.size();
for (unsigned int i = 0; i < n_elements; ++i) {
QPDFObjectHandle key_obj = olist.at(i);
QPDFObjectHandle val;
@@ -414,7 +417,7 @@ QPDFParser::parse(bool& empty, bool content_stream)
if (state_stack.back() == st_top) {
done = true;
} else {
- stack.back().olist.push_back(is_null ? null_oh : object);
+ stack.back().olist.push_back(object);
}
}
}