diff options
author | Jay Berkenbilt <ejb@ql.org> | 2020-04-05 05:35:35 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2020-04-06 02:07:13 +0200 |
commit | 893d38b87e4ad6c6c55f49464f6b721c516ec878 (patch) | |
tree | 200289d57f269a394bc2a93f5978322d037f8628 /libqpdf/QPDFObjectHandle.cc | |
parent | a5367003c3eaf7f21d369c1c6d11338564cf04f2 (diff) | |
download | qpdf-893d38b87e4ad6c6c55f49464f6b721c516ec878.tar.zst |
Allow propagation of errors and retry through StreamDataProvider
StreamDataProvider::provideStreamData now has a rich enough API for it
to effectively proxy to pipeStreamData.
Diffstat (limited to 'libqpdf/QPDFObjectHandle.cc')
-rw-r--r-- | libqpdf/QPDFObjectHandle.cc | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index dca59216..ab77fb73 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -36,6 +36,36 @@ class TerminateParsing { }; +QPDFObjectHandle::StreamDataProvider::StreamDataProvider( + bool supports_retry) : + supports_retry(supports_retry) +{ +} + +void +QPDFObjectHandle::StreamDataProvider::provideStreamData( + int objid, int generation, Pipeline* pipeline) +{ + throw std::logic_error( + "you must override provideStreamData -- see QPDFObjectHandle.hh"); +} + +bool +QPDFObjectHandle::StreamDataProvider::provideStreamData( + int objid, int generation, Pipeline* pipeline, + bool suppress_warnings, bool will_retry) +{ + throw std::logic_error( + "you must override provideStreamData -- see QPDFObjectHandle.hh"); + return false; +} + +bool +QPDFObjectHandle::StreamDataProvider::supportsRetry() +{ + return this->supports_retry; +} + class CoalesceProvider: public QPDFObjectHandle::StreamDataProvider { public: @@ -1135,14 +1165,29 @@ QPDFObjectHandle::getRawStreamData() } bool -QPDFObjectHandle::pipeStreamData(Pipeline* p, +QPDFObjectHandle::pipeStreamData(Pipeline* p, bool* filtering_attempted, int encode_flags, qpdf_stream_decode_level_e decode_level, bool suppress_warnings, bool will_retry) { assertStream(); return dynamic_cast<QPDF_Stream*>(obj.getPointer())->pipeStreamData( - p, encode_flags, decode_level, suppress_warnings, will_retry); + p, filtering_attempted, encode_flags, decode_level, + suppress_warnings, will_retry); +} + +bool +QPDFObjectHandle::pipeStreamData(Pipeline* p, + int encode_flags, + qpdf_stream_decode_level_e decode_level, + bool suppress_warnings, bool will_retry) +{ + assertStream(); + bool filtering_attempted; + dynamic_cast<QPDF_Stream*>(obj.getPointer())->pipeStreamData( + p, &filtering_attempted, encode_flags, decode_level, + suppress_warnings, will_retry); + return filtering_attempted; } bool |