diff options
author | Jay Berkenbilt <ejb@ql.org> | 2019-08-20 03:23:39 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2019-08-20 03:43:44 +0200 |
commit | 8a9086a6894e83ebc60fbd39cb835b20aa2683b1 (patch) | |
tree | 6992c28607069c4b32b670de7b156359b15a6038 /libqpdf/QPDF.cc | |
parent | 43f91f58b8e1be986646129c2fb3229de67ba42f (diff) | |
download | qpdf-8a9086a6894e83ebc60fbd39cb835b20aa2683b1.tar.zst |
Accept extraneous space after stream keyword (fixes #329)
Diffstat (limited to 'libqpdf/QPDF.cc')
-rw-r--r-- | libqpdf/QPDF.cc | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 23545d1a..e83dfa09 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -1477,8 +1477,13 @@ QPDF::readObject(PointerHolder<InputSource> input, // stream data. However, some readers, including // Adobe reader, accept a carriage return by itself // when followed by a non-newline character, so that's - // what we do here. + // what we do here. We have also seen files that have + // extraneous whitespace between the stream keyword and + // the newline. + bool done = false; + while (! done) { + done = true; char ch; if (input->read(&ch, 1) == 0) { @@ -1519,14 +1524,21 @@ QPDF::readObject(PointerHolder<InputSource> input, } } } + else if (QUtil::is_space(ch)) + { + warn(QPDFExc( + qpdf_e_damaged_pdf, + input->getName(), + this->m->last_object_description, + input->tell(), + "stream keyword followed by" + " extraneous whitespace")); + done = false; + } else { QTC::TC("qpdf", "QPDF stream without newline"); - if (! QUtil::is_space(ch)) - { - QTC::TC("qpdf", "QPDF stream with non-space"); - input->unreadCh(ch); - } + input->unreadCh(ch); warn(QPDFExc(qpdf_e_damaged_pdf, input->getName(), this->m->last_object_description, input->tell(), |