From 599daddb47fc0340e48b02f7ba00ef86bfef8c45 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sun, 8 Mar 2009 19:00:19 +0000 Subject: decode streams on check, always exit abnormally when warnings are detected git-svn-id: svn+q:///qpdf/trunk@660 71b93d88-0707-0410-a8cf-f5a4172ac649 --- libqpdf/QPDF.cc | 49 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 10 deletions(-) (limited to 'libqpdf') diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 0fe738f4..bcee47a4 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -1810,23 +1811,51 @@ QPDF::pipeStreamData(int objid, int generation, } } - this->file.seek(offset, SEEK_SET); - char buf[10240]; - while (length > 0) + try { - size_t to_read = (sizeof(buf) < length ? sizeof(buf) : length); - size_t len = this->file.read(buf, to_read); - if (len == 0) + this->file.seek(offset, SEEK_SET); + char buf[10240]; + while (length > 0) { - throw QPDFExc(this->file.getName(), this->file.getLastOffset(), - "unexpected EOF reading stream data"); + size_t to_read = (sizeof(buf) < length ? sizeof(buf) : length); + size_t len = this->file.read(buf, to_read); + if (len == 0) + { + throw QPDFExc(this->file.getName(), this->file.getLastOffset(), + "unexpected EOF reading stream data"); + } + length -= len; + pipeline->write((unsigned char*)buf, len); } - length -= len; - pipeline->write((unsigned char*)buf, len); + } + catch (QEXC::General& e) + { + QTC::TC("qpdf", "QPDF decoding error warning"); + warn(QPDFExc(this->file.getName(), this->file.getLastOffset(), + "error decoding stream data for object " + + QUtil::int_to_string(objid) + " " + + QUtil::int_to_string(generation) + ": " + e.unparse())); } pipeline->finish(); } +void +QPDF::decodeStreams() +{ + for (std::map::iterator iter = + this->xref_table.begin(); + iter != this->xref_table.end(); ++iter) + { + ObjGen const& og = (*iter).first; + QPDFObjectHandle obj = getObjectByID(og.obj, og.gen); + if (obj.isStream()) + { + Pl_Discard pl; + obj.pipeStreamData(&pl, true, false, false); + } + } +} + std::vector const& QPDF::getAllPages() { -- cgit v1.2.3-54-g00ecf