From 893d38b87e4ad6c6c55f49464f6b721c516ec878 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 4 Apr 2020 23:35:35 -0400 Subject: Allow propagation of errors and retry through StreamDataProvider StreamDataProvider::provideStreamData now has a rich enough API for it to effectively proxy to pipeStreamData. --- libqpdf/QPDF.cc | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'libqpdf/QPDF.cc') 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 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 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 -- cgit v1.2.3-54-g00ecf