Commit c97da2df97db1836679f08eeb66241ebb32e127b
1 parent
172ab474
Refactor `QPDFWriter::writeStream`: simplify stream data filtering logic, consol…
…idate conditions, and enhance readability.
Showing
1 changed file
with
18 additions
and
24 deletions
libqpdf/QPDFWriter.cc
| ... | ... | @@ -1555,44 +1555,38 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st |
| 1555 | 1555 | encode_flags = 0; |
| 1556 | 1556 | } |
| 1557 | 1557 | |
| 1558 | - bool filtered = false; | |
| 1559 | 1558 | for (bool first_attempt: {true, false}) { |
| 1560 | 1559 | auto pp_stream_data = |
| 1561 | 1560 | stream_data ? pipeline_stack.activate(*stream_data) : pipeline_stack.activate(true); |
| 1562 | 1561 | |
| 1563 | 1562 | try { |
| 1564 | - filtered = stream.pipeStreamData( | |
| 1565 | - pipeline, | |
| 1566 | - filter ? encode_flags : 0, | |
| 1567 | - filter ? decode_level : qpdf_dl_none, | |
| 1568 | - false, | |
| 1569 | - first_attempt); | |
| 1570 | - if (filter && !filtered) { | |
| 1571 | - // Try again | |
| 1572 | - filter = false; | |
| 1573 | - stream.setFilterOnWrite(false); | |
| 1574 | - } else { | |
| 1563 | + if (stream.pipeStreamData( | |
| 1564 | + pipeline, | |
| 1565 | + filter ? encode_flags : 0, | |
| 1566 | + filter ? decode_level : qpdf_dl_none, | |
| 1567 | + false, | |
| 1568 | + first_attempt)) { | |
| 1569 | + return {true, encode_flags & qpdf_ef_compress, is_root_metadata}; | |
| 1570 | + } | |
| 1571 | + if (!filter) { | |
| 1575 | 1572 | break; |
| 1576 | 1573 | } |
| 1577 | 1574 | } catch (std::runtime_error& e) { |
| 1578 | - if (filter && first_attempt) { | |
| 1579 | - stream.warn("error while getting stream data: "s + e.what()); | |
| 1580 | - stream.warn("qpdf will attempt to write the damaged stream unchanged"); | |
| 1581 | - filter = false; | |
| 1582 | - stream.setFilterOnWrite(false); | |
| 1583 | - continue; | |
| 1575 | + if (!(filter && first_attempt)) { | |
| 1576 | + throw std::runtime_error( | |
| 1577 | + "error while getting stream data for " + stream.unparse() + ": " + e.what()); | |
| 1584 | 1578 | } |
| 1585 | - throw std::runtime_error( | |
| 1586 | - "error while getting stream data for " + stream.unparse() + ": " + e.what()); | |
| 1579 | + stream.warn("error while getting stream data: "s + e.what()); | |
| 1580 | + stream.warn("qpdf will attempt to write the damaged stream unchanged"); | |
| 1587 | 1581 | } |
| 1582 | + // Try again | |
| 1583 | + filter = false; | |
| 1584 | + stream.setFilterOnWrite(false); | |
| 1588 | 1585 | if (stream_data) { |
| 1589 | 1586 | stream_data->clear(); |
| 1590 | 1587 | } |
| 1591 | 1588 | } |
| 1592 | - if (!filtered) { | |
| 1593 | - return {false, false, is_root_metadata}; | |
| 1594 | - } | |
| 1595 | - return {filtered, encode_flags & qpdf_ef_compress, is_root_metadata}; | |
| 1589 | + return {false, false, is_root_metadata}; | |
| 1596 | 1590 | } |
| 1597 | 1591 | |
| 1598 | 1592 | void | ... | ... |