summaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFObjectHandle.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2020-04-05 05:35:35 +0200
committerJay Berkenbilt <ejb@ql.org>2020-04-06 02:07:13 +0200
commit893d38b87e4ad6c6c55f49464f6b721c516ec878 (patch)
tree200289d57f269a394bc2a93f5978322d037f8628 /libqpdf/QPDFObjectHandle.cc
parenta5367003c3eaf7f21d369c1c6d11338564cf04f2 (diff)
downloadqpdf-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.cc49
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