aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF.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/QPDF.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/QPDF.cc')
-rw-r--r--libqpdf/QPDF.cc25
1 files changed, 17 insertions, 8 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index 3177d38b..6219509e 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -68,27 +68,37 @@ QPDF::ForeignStreamData::ForeignStreamData(
QPDF::CopiedStreamDataProvider::CopiedStreamDataProvider(
QPDF& destination_qpdf) :
+ QPDFObjectHandle::StreamDataProvider(true),
destination_qpdf(destination_qpdf)
{
}
-void
+bool
QPDF::CopiedStreamDataProvider::provideStreamData(
- int objid, int generation, Pipeline* pipeline)
+ int objid, int generation, Pipeline* pipeline,
+ bool suppress_warnings, bool will_retry)
{
PointerHolder<ForeignStreamData> foreign_data =
this->foreign_stream_data[QPDFObjGen(objid, generation)];
+ bool result = false;
if (foreign_data.getPointer())
{
- destination_qpdf.pipeForeignStreamData(
- foreign_data, pipeline, 0, qpdf_dl_none);
+ result = destination_qpdf.pipeForeignStreamData(
+ foreign_data, pipeline, suppress_warnings, will_retry);
+ QTC::TC("qpdf", "QPDF copy foreign with data",
+ result ? 0 : 1);
}
else
{
QPDFObjectHandle foreign_stream =
this->foreign_streams[QPDFObjGen(objid, generation)];
- foreign_stream.pipeStreamData(pipeline, 0, qpdf_dl_none);
+ result = foreign_stream.pipeStreamData(
+ pipeline, nullptr, 0, qpdf_dl_none,
+ suppress_warnings, will_retry);
+ QTC::TC("qpdf", "QPDF copy foreign with foreign_stream",
+ result ? 0 : 1);
}
+ return result;
}
void
@@ -2851,8 +2861,7 @@ bool
QPDF::pipeForeignStreamData(
PointerHolder<ForeignStreamData> foreign,
Pipeline* pipeline,
- int encode_flags,
- qpdf_stream_decode_level_e decode_level)
+ bool suppress_warnings, bool will_retry)
{
if (foreign->encp->encrypted)
{
@@ -2863,7 +2872,7 @@ QPDF::pipeForeignStreamData(
foreign->foreign_objid, foreign->foreign_generation,
foreign->offset, foreign->length,
foreign->local_dict, foreign->is_attachment_stream,
- pipeline, false, false);
+ pipeline, suppress_warnings, will_retry);
}
void