From 8a9086a6894e83ebc60fbd39cb835b20aa2683b1 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Mon, 19 Aug 2019 21:23:39 -0400 Subject: Accept extraneous space after stream keyword (fixes #329) --- libqpdf/QPDF.cc | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'libqpdf') 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 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 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(), -- cgit v1.2.3-54-g00ecf