From 36e92e0342110f8f30cd4b14e9d1585c7f35ebc7 Mon Sep 17 00:00:00 2001 From: m-holger Date: Fri, 9 May 2025 13:18:30 +0100 Subject: [PATCH] Refactor decode parameters handling in QPDF_Stream. --- libqpdf/QPDF_Stream.cc | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/libqpdf/QPDF_Stream.cc b/libqpdf/QPDF_Stream.cc index e07e36c..026a72f 100644 --- a/libqpdf/QPDF_Stream.cc +++ b/libqpdf/QPDF_Stream.cc @@ -386,16 +386,28 @@ Stream::filterable( // See if we can support any decode parameters that are specified. auto decode_obj = s->stream_dict.getKey("/DecodeParms"); - std::vector decode_parms; auto decode_array = decode_obj.as_array(strict); if (!decode_array || decode_array.size() == 0) { if (decode_array) { - decode_parms.assign(filters.size(), QPDFObjectHandle::newNull()); - } else { - decode_parms.assign(filters.size(), decode_obj); + decode_obj = QPDFObjectHandle::newNull(); + } + + for (auto& filter: filters) { + if (!filter->setDecodeParms(decode_obj)) { + return false; + } + if (filter->isLossyCompression()) { + specialized_compression = true; + lossy_compression = true; + continue; + } + if (filter->isSpecializedCompression()) { + specialized_compression = true; + } } } else { + std::vector decode_parms; for (auto& item: decode_array) { decode_parms.emplace_back(item); } @@ -405,22 +417,22 @@ Stream::filterable( warn("stream /DecodeParms length is inconsistent with filters"); return false; } - } - for (size_t i = 0; i < filters.size(); ++i) { - auto filter = filters.at(i); - auto decode_item = decode_parms.at(i); + for (size_t i = 0; i < filters.size(); ++i) { + auto filter = filters.at(i); + auto decode_item = decode_parms.at(i); - if (!filter->setDecodeParms(decode_item)) { - return false; - } - if (filter->isLossyCompression()) { - specialized_compression = true; - lossy_compression = true; - continue; - } - if (filter->isSpecializedCompression()) { - specialized_compression = true; + if (!filter->setDecodeParms(decode_item)) { + return false; + } + if (filter->isLossyCompression()) { + specialized_compression = true; + lossy_compression = true; + continue; + } + if (filter->isSpecializedCompression()) { + specialized_compression = true; + } } } -- libgit2 0.21.4