Commit 28e756f18faa23a8f3e8b593bc80ce8cbc7a7938

Authored by m-holger
1 parent 3470c5f1

Refactor stream filtering logic for empty streams

Introduced explicit checks for empty streams and refined filtering conditions for improved clarity and correctness.
libqpdf/QPDF_Stream.cc
... ... @@ -432,7 +432,16 @@ Stream::pipeStreamData(
432 432 filterp = &ignored;
433 433 }
434 434 bool& filter = *filterp;
435   - filter = encode_flags || decode_level != qpdf_dl_none;
  435 +
  436 + const bool empty_stream = !s->stream_provider && !s->stream_data && s->length == 0;
  437 + const bool empty_stream_data = s->stream_data && s->stream_data->getSize() == 0;
  438 + const bool empty = empty_stream || empty_stream_data;
  439 +
  440 + if(empty_stream || empty_stream_data) {
  441 + filter = true;
  442 + }
  443 +
  444 + filter = empty || encode_flags || decode_level != qpdf_dl_none;
436 445 if (filter) {
437 446 filter = filterable(decode_level, filters);
438 447 }
... ...
manual/release-notes.rst
... ... @@ -23,6 +23,13 @@ more detail.
23 23 not work on some older Linux distributions. If you need support
24 24 for an older distribution, please use version 12.2.0 or below.
25 25  
  26 + - Other enhancements
  27 +
  28 + - ``QPDFWriter`` will no longer add filters when writing empty streams.
  29 +
  30 + - More sanity checks have been added when files with damaged xref tables
  31 + are recovered.
  32 +
26 33 12.2.0: May 4, 2025
27 34 - Upcoming C++ Version Change
28 35  
... ...