Commit 154d60c4abcff6d9810c6828ac241233284c3122

Authored by m-holger
1 parent c934608d

Refactor `Pl_stack` in `QPDFWriter` to streamline MD5 pipeline activation and po…

…pping, remove redundant `PipelinePopper` usage, and improve encapsulation of MD5 handling.

# Conflicts:
#	libqpdf/QPDFWriter.cc
Showing 1 changed file with 15 additions and 10 deletions
libqpdf/QPDFWriter.cc
... ... @@ -107,9 +107,8 @@ namespace
107 107 };
108 108  
109 109 public:
110   - Pl_stack(pl::Count*& top, std::unique_ptr<Pl_MD5>& md5_pipeline) :
111   - top(top),
112   - md5_pipeline(md5_pipeline)
  110 + Pl_stack(pl::Count*& top) :
  111 + top(top)
113 112 {
114 113 }
115 114  
... ... @@ -196,6 +195,16 @@ namespace
196 195 stack.emplace_back(std::move(c));
197 196 }
198 197  
  198 + // Return the hex digest and disable the MD5 pipeline.
  199 + std::string
  200 + hex_digest()
  201 + {
  202 + qpdf_assert_debug(md5_pipeline);
  203 + auto digest = md5_pipeline->getHexDigest();
  204 + md5_pipeline->enable(false);
  205 + return digest;
  206 + }
  207 +
199 208 void
200 209 clear_buffer()
201 210 {
... ... @@ -227,7 +236,7 @@ namespace
227 236  
228 237 std::vector<std::unique_ptr<pl::Count>> stack;
229 238 pl::Count*& top;
230   - std::unique_ptr<Pl_MD5>& md5_pipeline;
  239 + std::unique_ptr<Pl_MD5> md5_pipeline{nullptr};
231 240 unsigned long last_id{0};
232 241 unsigned long md5_id{0};
233 242 std::string count_buffer;
... ... @@ -319,7 +328,6 @@ class QPDFWriter::Members
319 328 std::map<int, std::vector<QPDFObjGen>> object_stream_to_objects;
320 329 Pl_stack pipeline_stack;
321 330 bool deterministic_id{false};
322   - std::unique_ptr<Pl_MD5> md5_pipeline{nullptr};
323 331 std::string deterministic_id_data;
324 332 bool did_write_setup{false};
325 333  
... ... @@ -336,7 +344,7 @@ class QPDFWriter::Members
336 344 QPDFWriter::Members::Members(QPDF& pdf) :
337 345 pdf(pdf),
338 346 root_og(pdf.getRoot().getObjGen().isIndirect() ? pdf.getRoot().getObjGen() : QPDFObjGen(-1, 0)),
339   - pipeline_stack(pipeline, md5_pipeline)
  347 + pipeline_stack(pipeline)
340 348 {
341 349 }
342 350  
... ... @@ -1128,10 +1136,8 @@ QPDFWriter::computeDeterministicIDData()
1128 1136 throw std::logic_error(
1129 1137 "Deterministic ID computation enabled after ID generation has already occurred.");
1130 1138 }
1131   - qpdf_assert_debug(m->md5_pipeline != nullptr);
1132 1139 qpdf_assert_debug(m->deterministic_id_data.empty());
1133   - m->deterministic_id_data = m->md5_pipeline->getHexDigest();
1134   - m->md5_pipeline->enable(false);
  1140 + m->deterministic_id_data = m->pipeline_stack.hex_digest();
1135 1141 }
1136 1142  
1137 1143 int
... ... @@ -2922,7 +2928,6 @@ QPDFWriter::writeLinearized()
2922 2928 QTC::TC("qpdf", "QPDFWriter linearized deterministic ID", need_xref_stream ? 0 : 1);
2923 2929 computeDeterministicIDData();
2924 2930 pp_md5.pop();
2925   - qpdf_assert_debug(m->md5_pipeline == nullptr);
2926 2931 }
2927 2932  
2928 2933 // Close first pass pipeline
... ...