aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
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
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')
-rw-r--r--libqpdf/Pl_Buffer.cc3
-rw-r--r--libqpdf/QPDF.cc18
-rw-r--r--libqpdf/QPDFObjectHandle.cc2
-rw-r--r--libqpdf/QPDFWriter.cc16
-rw-r--r--libqpdf/QPDF_Stream.cc11
-rw-r--r--libqpdf/QPDF_encryption.cc3
-rw-r--r--libqpdf/qpdf-c.cc10
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)