diff options
author | Jay Berkenbilt <ejb@ql.org> | 2019-08-21 18:50:36 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2019-08-22 23:55:16 +0200 |
commit | 225cd9dac27d685833156dfc249838cda11cd2ef (patch) | |
tree | c839a3bcc99c08150459ca24de5750f4e5a04e10 /libqpdf/QPDF.cc | |
parent | ae5bd7102da5d4b456f08790a0efc04c1c42b4a5 (diff) | |
download | qpdf-225cd9dac27d685833156dfc249838cda11cd2ef.tar.zst |
Protect against coding error of re-entrant parsing
Diffstat (limited to 'libqpdf/QPDF.cc')
-rw-r--r-- | libqpdf/QPDF.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 068630d1..1d54ef44 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -150,6 +150,7 @@ QPDF::Members::Members() : reconstructed_xref(false), fixed_dangling_refs(false), immediate_copy_from(false), + in_parse(false), first_xref_item_offset(0), uncompressed_after_compressed(false) { @@ -417,6 +418,20 @@ QPDF::parse(char const* password) } void +QPDF::inParse(bool v) +{ + if (this->m->in_parse == v) + { + // This happens of QPDFObjectHandle::parseInternal tries to + // resolve an indirect object while it is parsing. + throw std::logic_error( + "QPDF: re-entrant parsing detected. This is a qpdf bug." + " Please report at https://github.com/qpdf/qpdf/issues."); + } + this->m->in_parse = v; +} + +void QPDF::warn(QPDFExc const& e) { this->m->warnings.push_back(e); |