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,7 +432,16 @@ Stream::pipeStreamData(
432 filterp = &ignored; 432 filterp = &ignored;
433 } 433 }
434 bool& filter = *filterp; 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 if (filter) { 445 if (filter) {
437 filter = filterable(decode_level, filters); 446 filter = filterable(decode_level, filters);
438 } 447 }
manual/release-notes.rst
@@ -23,6 +23,13 @@ more detail. @@ -23,6 +23,13 @@ more detail.
23 not work on some older Linux distributions. If you need support 23 not work on some older Linux distributions. If you need support
24 for an older distribution, please use version 12.2.0 or below. 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 12.2.0: May 4, 2025 33 12.2.0: May 4, 2025
27 - Upcoming C++ Version Change 34 - Upcoming C++ Version Change
28 35