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,44 +1555,38 @@ QPDFWriter::Members::will_filter_stream(QPDFObjectHandle stream, std::string* st | ||
| 1555 | encode_flags = 0; | 1555 | encode_flags = 0; |
| 1556 | } | 1556 | } |
| 1557 | 1557 | ||
| 1558 | - bool filtered = false; | ||
| 1559 | for (bool first_attempt: {true, false}) { | 1558 | for (bool first_attempt: {true, false}) { |
| 1560 | auto pp_stream_data = | 1559 | auto pp_stream_data = |
| 1561 | stream_data ? pipeline_stack.activate(*stream_data) : pipeline_stack.activate(true); | 1560 | stream_data ? pipeline_stack.activate(*stream_data) : pipeline_stack.activate(true); |
| 1562 | 1561 | ||
| 1563 | try { | 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 | break; | 1572 | break; |
| 1576 | } | 1573 | } |
| 1577 | } catch (std::runtime_error& e) { | 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 | if (stream_data) { | 1585 | if (stream_data) { |
| 1589 | stream_data->clear(); | 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 | void | 1592 | void |