Commit 154d60c4abcff6d9810c6828ac241233284c3122
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 | ... | ... |