Commit c97da2df97db1836679f08eeb66241ebb32e127b

Authored by m-holger
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
... ...