summaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2010-09-24 22:45:18 +0200
committerJay Berkenbilt <ejb@ql.org>2010-09-24 22:45:18 +0200
commita7e269537d8f4b33d1bc8a5a83c53432db9b7560 (patch)
tree4fc085e51f616651b8b7efd5ef281d205f83a3e6 /libqpdf/QPDF.cc
parentce8b1ba6a5a5650d90571f5c39855af341dfad47 (diff)
downloadqpdf-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.cc18
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(),