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,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