Commit 28e756f18faa23a8f3e8b593bc80ce8cbc7a7938
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.
Showing
2 changed files
with
17 additions
and
1 deletions
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 | ... | ... |