aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFWriter.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2017-08-19 20:40:33 +0200
committerJay Berkenbilt <ejb@ql.org>2017-08-21 23:44:22 +0200
commitddc6cf0cf6c11bb50f9f576bf547df3674142c97 (patch)
tree315cb87cce6ab27648dfa8edc5e941f04bf5178b /libqpdf/QPDFWriter.cc
parent9744414c66e3f85700ebc8b32d90f45ff97221bd (diff)
downloadqpdf-ddc6cf0cf6c11bb50f9f576bf547df3674142c97.tar.zst
Precheck streams by default
There is no need for a --precheck-streams option. We can do the precheck without imposing any penalty, only re-encoding the stream if it fails the first time.
Diffstat (limited to 'libqpdf/QPDFWriter.cc')
-rw-r--r--libqpdf/QPDFWriter.cc49
1 files changed, 20 insertions, 29 deletions
diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc
index fe25853a..06945c49 100644
--- a/libqpdf/QPDFWriter.cc
+++ b/libqpdf/QPDFWriter.cc
@@ -59,7 +59,6 @@ QPDFWriter::init()
stream_decode_level = qpdf_dl_none;
stream_decode_level_set = false;
qdf_mode = false;
- precheck_streams = false;
preserve_unreferenced_objects = false;
newline_before_endstream = false;
static_id = false;
@@ -216,12 +215,6 @@ QPDFWriter::setQDFMode(bool val)
}
void
-QPDFWriter::setPrecheckStreams(bool val)
-{
- this->precheck_streams = val;
-}
-
-void
QPDFWriter::setPreserveUnreferencedObjects(bool val)
{
this->preserve_unreferenced_objects = val;
@@ -1590,34 +1583,32 @@ QPDFWriter::unparseObject(QPDFObjectHandle object, int level,
flags |= f_stream;
- if (filter && this->precheck_streams)
+ PointerHolder<Buffer> stream_data;
+ bool filtered = false;
+ for (int attempt = 1; attempt <= 2; ++attempt)
{
- try
+ pushPipeline(new Pl_Buffer("stream data"));
+ activatePipelineStack();
+
+ filtered =
+ object.pipeStreamData(
+ this->pipeline,
+ (((filter && normalize) ? qpdf_ef_normalize : 0) |
+ ((filter && compress) ? qpdf_ef_compress : 0)),
+ (filter
+ ? (uncompress ? qpdf_dl_all : this->stream_decode_level)
+ : qpdf_dl_none));
+ popPipelineStack(&stream_data);
+ if (filter && (! filtered))
{
- QTC::TC("qpdf", "QPDFWriter precheck stream");
- Pl_Discard discard;
- filter = object.pipeStreamData(
- &discard, 0, qpdf_dl_all, true);
+ // Try again
+ filter = false;
}
- catch (std::exception&)
+ else
{
- filter = false;
+ break;
}
}
-
- pushPipeline(new Pl_Buffer("stream data"));
- activatePipelineStack();
-
- bool filtered =
- object.pipeStreamData(
- this->pipeline,
- (((filter && normalize) ? qpdf_ef_normalize : 0) |
- ((filter && compress) ? qpdf_ef_compress : 0)),
- (filter
- ? (uncompress ? qpdf_dl_all : this->stream_decode_level)
- : qpdf_dl_none));
- PointerHolder<Buffer> stream_data;
- popPipelineStack(&stream_data);
if (filtered)
{
flags |= f_filtered;