diff options
author | Jay Berkenbilt <ejb@ql.org> | 2010-09-24 22:45:18 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2010-09-24 22:45:18 +0200 |
commit | a7e269537d8f4b33d1bc8a5a83c53432db9b7560 (patch) | |
tree | 4fc085e51f616651b8b7efd5ef281d205f83a3e6 /libqpdf/QPDF.cc | |
parent | ce8b1ba6a5a5650d90571f5c39855af341dfad47 (diff) | |
download | qpdf-a7e269537d8f4b33d1bc8a5a83c53432db9b7560.tar.zst |
update code to new PointerHolder, and reintroduce change that was accidentally backed out
git-svn-id: svn+q:///qpdf/trunk@1031 71b93d88-0707-0410-a8cf-f5a4172ac649
Diffstat (limited to 'libqpdf/QPDF.cc')
-rw-r--r-- | libqpdf/QPDF.cc | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 6783f2fb..bf9beac5 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -854,7 +854,7 @@ QPDF::processXRefStream(off_t xref_offset, QPDFObjectHandle& xref_obj) int expected_size = entry_size * num_entries; PointerHolder<Buffer> bp = xref_obj.getStreamData(); - int actual_size = bp.getPointer()->getSize(); + int actual_size = bp->getSize(); if (expected_size != actual_size) { @@ -878,7 +878,7 @@ QPDF::processXRefStream(off_t xref_offset, QPDFObjectHandle& xref_obj) bool saw_first_compressed_object = false; - unsigned char const* data = bp.getPointer()->getBuffer(); + unsigned char const* data = bp->getBuffer(); for (int i = 0; i < num_entries; ++i) { // Read this entry @@ -1200,6 +1200,20 @@ QPDF::readObjectInternal(PointerHolder<InputSource> input, olist.pop_back(); olist.pop_back(); } + else if ((value == "endobj") && + (! (in_array || in_dictionary))) + { + // Nothing in the PDF spec appears to allow empty + // objects, but they have been encountered in + // actual PDF files and Adobe Reader appears to + // ignore them. + warn(QPDFExc(qpdf_e_damaged_pdf, input->getName(), + this->last_object_description, + input->getLastOffset(), + "empty object treated as null")); + object = QPDFObjectHandle::newNull(); + input->seek(input->getLastOffset(), SEEK_SET); + } else { throw QPDFExc(qpdf_e_damaged_pdf, input->getName(), |