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 | |
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')
-rw-r--r-- | libqpdf/Pl_Buffer.cc | 3 | ||||
-rw-r--r-- | libqpdf/QPDF.cc | 18 | ||||
-rw-r--r-- | libqpdf/QPDFObjectHandle.cc | 2 | ||||
-rw-r--r-- | libqpdf/QPDFWriter.cc | 16 | ||||
-rw-r--r-- | libqpdf/QPDF_Stream.cc | 11 | ||||
-rw-r--r-- | libqpdf/QPDF_encryption.cc | 3 | ||||
-rw-r--r-- | libqpdf/qpdf-c.cc | 10 |
7 files changed, 36 insertions, 27 deletions
diff --git a/libqpdf/Pl_Buffer.cc b/libqpdf/Pl_Buffer.cc index 1729b2c3..38af153d 100644 --- a/libqpdf/Pl_Buffer.cc +++ b/libqpdf/Pl_Buffer.cc @@ -51,9 +51,8 @@ Pl_Buffer::getBuffer() unsigned char* p = b->getBuffer(); while (! this->data.empty()) { - PointerHolder<Buffer> bph = this->data.front(); + PointerHolder<Buffer> bp = this->data.front(); this->data.pop_front(); - Buffer* bp = bph.getPointer(); size_t bytes = bp->getSize(); memcpy(p, bp->getBuffer(), bytes); p += bytes; 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(), diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index 658f4393..b877f3dd 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -528,7 +528,7 @@ std::string QPDFObjectHandle::unparseResolved() { dereference(); - return this->obj.getPointer()->unparse(); + return this->obj->unparse(); } QPDFObjectHandle diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc index 68fd62f5..0cba17d9 100644 --- a/libqpdf/QPDFWriter.cc +++ b/libqpdf/QPDFWriter.cc @@ -527,8 +527,7 @@ QPDFWriter::writeString(std::string const& str) void QPDFWriter::writeBuffer(PointerHolder<Buffer>& b) { - this->pipeline->write(b.getPointer()->getBuffer(), - b.getPointer()->getSize()); + this->pipeline->write(b->getBuffer(), b->getSize()); } void @@ -1038,7 +1037,7 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level, compress = false; } - this->cur_stream_length = stream_data.getPointer()->getSize(); + this->cur_stream_length = stream_data->getSize(); if (is_metadata && this->encrypted && (! this->encrypt_metadata)) { // Don't encrypt stream data for the metadata stream @@ -1226,7 +1225,7 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object) writeStringQDF("\n "); writeString(" /Type /ObjStm"); writeStringQDF("\n "); - unsigned long length = stream_buffer.getPointer()->getSize(); + unsigned long length = stream_buffer->getSize(); adjustAESStreamLength(length); writeString(" /Length " + QUtil::int_to_string(length)); writeStringQDF("\n "); @@ -1718,8 +1717,8 @@ QPDFWriter::writeHintStream(int hint_id) openObject(hint_id); setDataKey(hint_id); - unsigned char* hs = hint_buffer.getPointer()->getBuffer(); - unsigned long hlen = hint_buffer.getPointer()->getSize(); + unsigned char* hs = hint_buffer->getBuffer(); + unsigned long hlen = hint_buffer->getSize(); writeString("<< /Filter /FlateDecode /S "); writeString(QUtil::int_to_string(S)); @@ -1888,8 +1887,7 @@ QPDFWriter::writeXRefStream(int xref_id, int max_id, int max_offset, writeStringQDF("\n "); writeString(" /Type /XRef"); writeStringQDF("\n "); - writeString(" /Length " + - QUtil::int_to_string(xref_data.getPointer()->getSize())); + writeString(" /Length " + QUtil::int_to_string(xref_data->getSize())); if (compressed) { writeStringQDF("\n "); @@ -2251,7 +2249,7 @@ QPDFWriter::writeLinearized() activatePipelineStack(); writeHintStream(hint_id); popPipelineStack(&hint_buffer); - hint_length = hint_buffer.getPointer()->getSize(); + hint_length = hint_buffer->getSize(); // Restore hint offset this->xref[hint_id] = QPDFXRefEntry(1, hint_offset, 0); diff --git a/libqpdf/QPDF_Stream.cc b/libqpdf/QPDF_Stream.cc index db6cfb58..dc8c7f93 100644 --- a/libqpdf/QPDF_Stream.cc +++ b/libqpdf/QPDF_Stream.cc @@ -370,16 +370,15 @@ QPDF_Stream::pipeStreamData(Pipeline* pipeline, bool filter, if (this->stream_data.getPointer()) { QTC::TC("qpdf", "QPDF_Stream pipe replaced stream data"); - Buffer& b = *(this->stream_data.getPointer()); - pipeline->write(b.getBuffer(), b.getSize()); + pipeline->write(this->stream_data->getBuffer(), + this->stream_data->getSize()); pipeline->finish(); } else if (this->stream_provider.getPointer()) { - QPDFObjectHandle::StreamDataProvider& p = - (*this->stream_provider.getPointer()); Pl_Count count("stream provider count", pipeline); - p.provideStreamData(this->objid, this->generation, &count); + this->stream_provider->provideStreamData( + this->objid, this->generation, &count); size_t actual_length = count.getCount(); size_t desired_length = this->stream_dict.getKey("/Length").getIntValue(); @@ -424,7 +423,7 @@ QPDF_Stream::replaceStreamData(PointerHolder<Buffer> data, { this->stream_data = data; this->stream_provider = 0; - replaceFilterData(filter, decode_parms, data.getPointer()->getSize()); + replaceFilterData(filter, decode_parms, data->getSize()); } void diff --git a/libqpdf/QPDF_encryption.cc b/libqpdf/QPDF_encryption.cc index 51691399..7e191a27 100644 --- a/libqpdf/QPDF_encryption.cc +++ b/libqpdf/QPDF_encryption.cc @@ -571,8 +571,7 @@ QPDF::decryptString(std::string& str, int objid, int generation) pl.write((unsigned char*)str.c_str(), str.length()); pl.finish(); PointerHolder<Buffer> buf = bufpl.getBuffer(); - str = std::string((char*)buf.getPointer()->getBuffer(), - (size_t)buf.getPointer()->getSize()); + str = std::string((char*)buf->getBuffer(), (size_t)buf->getSize()); } else { diff --git a/libqpdf/qpdf-c.cc b/libqpdf/qpdf-c.cc index 384e0983..d7776d21 100644 --- a/libqpdf/qpdf-c.cc +++ b/libqpdf/qpdf-c.cc @@ -176,7 +176,7 @@ char const* qpdf_get_error_full_text(qpdf_data qpdf, qpdf_error e) { return ""; } - return e->exc.getPointer()->what(); + return e->exc->what(); } enum qpdf_error_code_e qpdf_get_error_code(qpdf_data qpdf, qpdf_error e) @@ -185,7 +185,7 @@ enum qpdf_error_code_e qpdf_get_error_code(qpdf_data qpdf, qpdf_error e) { return qpdf_e_success; } - return e->exc.getPointer()->getErrorCode(); + return e->exc->getErrorCode(); } char const* qpdf_get_error_filename(qpdf_data qpdf, qpdf_error e) @@ -194,7 +194,7 @@ char const* qpdf_get_error_filename(qpdf_data qpdf, qpdf_error e) { return ""; } - return e->exc.getPointer()->getFilename().c_str(); + return e->exc->getFilename().c_str(); } unsigned long qpdf_get_error_file_position(qpdf_data qpdf, qpdf_error e) @@ -203,7 +203,7 @@ unsigned long qpdf_get_error_file_position(qpdf_data qpdf, qpdf_error e) { return 0; } - return e->exc.getPointer()->getFilePosition(); + return e->exc->getFilePosition(); } char const* qpdf_get_error_message_detail(qpdf_data qpdf, qpdf_error e) @@ -212,7 +212,7 @@ char const* qpdf_get_error_message_detail(qpdf_data qpdf, qpdf_error e) { return ""; } - return e->exc.getPointer()->getMessageDetail().c_str(); + return e->exc->getMessageDetail().c_str(); } void qpdf_set_suppress_warnings(qpdf_data qpdf, QPDF_BOOL value) |