Commit 44fa03c64e66426981403ff2102613a0865cadd4

Authored by m-holger
1 parent 3575c062

Refactor `QPDFWriter`: move methods `setMinimumPDFVersion`, `parseVersion`,`disa…

…bleIncompatibleEncryption` and `compareVersions` to `QPDFWriter::Members`. Remove outdated test coverage entries.
include/qpdf/QPDFWriter.hh
@@ -505,9 +505,6 @@ class QPDFWriter @@ -505,9 +505,6 @@ class QPDFWriter
505 bool allow_modify_other, 505 bool allow_modify_other,
506 qpdf_r3_print_e print, 506 qpdf_r3_print_e print,
507 qpdf_r3_modify_e modify); 507 qpdf_r3_modify_e modify);
508 - void disableIncompatibleEncryption(int major, int minor, int extension_level);  
509 - void parseVersion(std::string const& version, int& major, int& minor) const;  
510 - int compareVersions(int major1, int minor1, int major2, int minor2) const;  
511 void setEncryptionParameters(char const* user_password, char const* owner_password); 508 void setEncryptionParameters(char const* user_password, char const* owner_password);
512 void setEncryptionMinimumVersion(); 509 void setEncryptionMinimumVersion();
513 void setDataKey(int objid); 510 void setDataKey(int objid);
libqpdf/QPDFWriter.cc
@@ -284,6 +284,12 @@ class QPDFWriter::Members @@ -284,6 +284,12 @@ class QPDFWriter::Members
284 delete output_buffer; 284 delete output_buffer;
285 } 285 }
286 286
  287 + void setMinimumPDFVersion(std::string const& version, int extension_level);
  288 +
  289 + void disableIncompatibleEncryption(int major, int minor, int extension_level);
  290 + void parseVersion(std::string const& version, int& major, int& minor) const;
  291 + int compareVersions(int major1, int minor1, int major2, int minor2) const;
  292 +
287 private: 293 private:
288 QPDFWriter& w; 294 QPDFWriter& w;
289 QPDF& pdf; 295 QPDF& pdf;
@@ -381,11 +387,9 @@ QPDFWriter::setOutputFilename(char const* filename) @@ -381,11 +387,9 @@ QPDFWriter::setOutputFilename(char const* filename)
381 bool close_file = false; 387 bool close_file = false;
382 if (filename == nullptr) { 388 if (filename == nullptr) {
383 description = "standard output"; 389 description = "standard output";
384 - QTC::TC("qpdf", "QPDFWriter write to stdout");  
385 f = stdout; 390 f = stdout;
386 QUtil::binary_stdout(); 391 QUtil::binary_stdout();
387 } else { 392 } else {
388 - QTC::TC("qpdf", "QPDFWriter write to file");  
389 f = QUtil::safe_fopen(filename, "wb+"); 393 f = QUtil::safe_fopen(filename, "wb+");
390 close_file = true; 394 close_file = true;
391 } 395 }
@@ -508,9 +512,15 @@ QPDFWriter::setNewlineBeforeEndstream(bool val) @@ -508,9 +512,15 @@ QPDFWriter::setNewlineBeforeEndstream(bool val)
508 void 512 void
509 QPDFWriter::setMinimumPDFVersion(std::string const& version, int extension_level) 513 QPDFWriter::setMinimumPDFVersion(std::string const& version, int extension_level)
510 { 514 {
  515 + m->setMinimumPDFVersion(version, extension_level);
  516 +}
  517 +
  518 +void
  519 +QPDFWriter::Members::setMinimumPDFVersion(std::string const& version, int extension_level)
  520 +{
511 bool set_version = false; 521 bool set_version = false;
512 bool set_extension_level = false; 522 bool set_extension_level = false;
513 - if (m->min_pdf_version.empty()) { 523 + if (min_pdf_version.empty()) {
514 set_version = true; 524 set_version = true;
515 set_extension_level = true; 525 set_extension_level = true;
516 } else { 526 } else {
@@ -519,25 +529,24 @@ QPDFWriter::setMinimumPDFVersion(std::string const& version, int extension_level @@ -519,25 +529,24 @@ QPDFWriter::setMinimumPDFVersion(std::string const& version, int extension_level
519 int min_major = 0; 529 int min_major = 0;
520 int min_minor = 0; 530 int min_minor = 0;
521 parseVersion(version, old_major, old_minor); 531 parseVersion(version, old_major, old_minor);
522 - parseVersion(m->min_pdf_version, min_major, min_minor); 532 + parseVersion(min_pdf_version, min_major, min_minor);
523 int compare = compareVersions(old_major, old_minor, min_major, min_minor); 533 int compare = compareVersions(old_major, old_minor, min_major, min_minor);
524 if (compare > 0) { 534 if (compare > 0) {
525 QTC::TC("qpdf", "QPDFWriter increasing minimum version", extension_level == 0 ? 0 : 1); 535 QTC::TC("qpdf", "QPDFWriter increasing minimum version", extension_level == 0 ? 0 : 1);
526 set_version = true; 536 set_version = true;
527 set_extension_level = true; 537 set_extension_level = true;
528 } else if (compare == 0) { 538 } else if (compare == 0) {
529 - if (extension_level > m->min_extension_level) {  
530 - QTC::TC("qpdf", "QPDFWriter increasing extension level"); 539 + if (extension_level > min_extension_level) {
531 set_extension_level = true; 540 set_extension_level = true;
532 } 541 }
533 } 542 }
534 } 543 }
535 544
536 if (set_version) { 545 if (set_version) {
537 - m->min_pdf_version = version; 546 + min_pdf_version = version;
538 } 547 }
539 if (set_extension_level) { 548 if (set_extension_level) {
540 - m->min_extension_level = extension_level; 549 + min_extension_level = extension_level;
541 } 550 }
542 } 551 }
543 552
@@ -562,7 +571,6 @@ QPDFWriter::setExtraHeaderText(std::string const& text) @@ -562,7 +571,6 @@ QPDFWriter::setExtraHeaderText(std::string const& text)
562 { 571 {
563 m->extra_header_text = text; 572 m->extra_header_text = text;
564 if (!m->extra_header_text.empty() && *m->extra_header_text.rbegin() != '\n') { 573 if (!m->extra_header_text.empty() && *m->extra_header_text.rbegin() != '\n') {
565 - QTC::TC("qpdf", "QPDFWriter extra header text add newline");  
566 m->extra_header_text += "\n"; 574 m->extra_header_text += "\n";
567 } else { 575 } else {
568 QTC::TC("qpdf", "QPDFWriter extra header text no newline"); 576 QTC::TC("qpdf", "QPDFWriter extra header text no newline");
@@ -913,44 +921,44 @@ QPDFWriter::copyEncryptionParameters(QPDF& qpdf) @@ -913,44 +921,44 @@ QPDFWriter::copyEncryptionParameters(QPDF& qpdf)
913 } 921 }
914 922
915 void 923 void
916 -QPDFWriter::disableIncompatibleEncryption(int major, int minor, int extension_level) 924 +QPDFWriter::Members::disableIncompatibleEncryption(int major, int minor, int extension_level)
917 { 925 {
918 - if (!m->encryption) { 926 + if (!encryption) {
919 return; 927 return;
920 } 928 }
921 if (compareVersions(major, minor, 1, 3) < 0) { 929 if (compareVersions(major, minor, 1, 3) < 0) {
922 - m->encryption = nullptr; 930 + encryption = nullptr;
923 return; 931 return;
924 } 932 }
925 - int V = m->encryption->getV();  
926 - int R = m->encryption->getR(); 933 + int V = encryption->getV();
  934 + int R = encryption->getR();
927 if (compareVersions(major, minor, 1, 4) < 0) { 935 if (compareVersions(major, minor, 1, 4) < 0) {
928 if (V > 1 || R > 2) { 936 if (V > 1 || R > 2) {
929 - m->encryption = nullptr; 937 + encryption = nullptr;
930 } 938 }
931 } else if (compareVersions(major, minor, 1, 5) < 0) { 939 } else if (compareVersions(major, minor, 1, 5) < 0) {
932 if (V > 2 || R > 3) { 940 if (V > 2 || R > 3) {
933 - m->encryption = nullptr; 941 + encryption = nullptr;
934 } 942 }
935 } else if (compareVersions(major, minor, 1, 6) < 0) { 943 } else if (compareVersions(major, minor, 1, 6) < 0) {
936 - if (m->encrypt_use_aes) {  
937 - m->encryption = nullptr; 944 + if (encrypt_use_aes) {
  945 + encryption = nullptr;
938 } 946 }
939 } else if ( 947 } else if (
940 (compareVersions(major, minor, 1, 7) < 0) || 948 (compareVersions(major, minor, 1, 7) < 0) ||
941 ((compareVersions(major, minor, 1, 7) == 0) && extension_level < 3)) { 949 ((compareVersions(major, minor, 1, 7) == 0) && extension_level < 3)) {
942 if (V >= 5 || R >= 5) { 950 if (V >= 5 || R >= 5) {
943 - m->encryption = nullptr; 951 + encryption = nullptr;
944 } 952 }
945 } 953 }
946 954
947 - if (!m->encryption) { 955 + if (!encryption) {
948 QTC::TC("qpdf", "QPDFWriter forced version disabled encryption"); 956 QTC::TC("qpdf", "QPDFWriter forced version disabled encryption");
949 } 957 }
950 } 958 }
951 959
952 void 960 void
953 -QPDFWriter::parseVersion(std::string const& version, int& major, int& minor) const 961 +QPDFWriter::Members::parseVersion(std::string const& version, int& major, int& minor) const
954 { 962 {
955 major = QUtil::string_to_int(version.c_str()); 963 major = QUtil::string_to_int(version.c_str());
956 minor = 0; 964 minor = 0;
@@ -967,19 +975,18 @@ QPDFWriter::parseVersion(std::string const&amp; version, int&amp; major, int&amp; minor) con @@ -967,19 +975,18 @@ QPDFWriter::parseVersion(std::string const&amp; version, int&amp; major, int&amp; minor) con
967 } 975 }
968 976
969 int 977 int
970 -QPDFWriter::compareVersions(int major1, int minor1, int major2, int minor2) const 978 +QPDFWriter::Members::compareVersions(int major1, int minor1, int major2, int minor2) const
971 { 979 {
972 if (major1 < major2) { 980 if (major1 < major2) {
973 return -1; 981 return -1;
974 - } else if (major1 > major2) { 982 + }
  983 + if (major1 > major2) {
975 return 1; 984 return 1;
976 - } else if (minor1 < minor2) { 985 + }
  986 + if (minor1 < minor2) {
977 return -1; 987 return -1;
978 - } else if (minor1 > minor2) {  
979 - return 1;  
980 - } else {  
981 - return 0;  
982 } 988 }
  989 + return minor1 > minor2 ? 1 : 0;
983 } 990 }
984 991
985 void 992 void
@@ -2170,10 +2177,9 @@ QPDFWriter::doWriteSetup() @@ -2170,10 +2177,9 @@ QPDFWriter::doWriteSetup()
2170 if (!m->forced_pdf_version.empty()) { 2177 if (!m->forced_pdf_version.empty()) {
2171 int major = 0; 2178 int major = 0;
2172 int minor = 0; 2179 int minor = 0;
2173 - parseVersion(m->forced_pdf_version, major, minor);  
2174 - disableIncompatibleEncryption(major, minor, m->forced_extension_level);  
2175 - if (compareVersions(major, minor, 1, 5) < 0) {  
2176 - QTC::TC("qpdf", "QPDFWriter forcing object stream disable"); 2180 + m->parseVersion(m->forced_pdf_version, major, minor);
  2181 + m->disableIncompatibleEncryption(major, minor, m->forced_extension_level);
  2182 + if (m->compareVersions(major, minor, 1, 5) < 0) {
2177 m->object_stream_mode = qpdf_o_disable; 2183 m->object_stream_mode = qpdf_o_disable;
2178 } 2184 }
2179 } 2185 }
qpdf/qpdf.testcov
@@ -40,8 +40,6 @@ main QTest array indirect 1 @@ -40,8 +40,6 @@ main QTest array indirect 1
40 main QTest dictionary 0 40 main QTest dictionary 0
41 main QTest dictionary indirect 1 41 main QTest dictionary indirect 1
42 main QTest stream 0 42 main QTest stream 0
43 -QPDFWriter write to stdout 0  
44 -QPDFWriter write to file 0  
45 QPDF lin write nshared_total > nshared_first_page 1 43 QPDF lin write nshared_total > nshared_first_page 1
46 QPDFWriter encrypted hint stream 0 44 QPDFWriter encrypted hint stream 0
47 QPDF opt inherited scalar 0 45 QPDF opt inherited scalar 0
@@ -142,7 +140,6 @@ qpdf-c called qpdf_init_write multiple times 0 @@ -142,7 +140,6 @@ qpdf-c called qpdf_init_write multiple times 0
142 QPDF_encryption rc4 decode string 0 140 QPDF_encryption rc4 decode string 0
143 QPDFWriter not compressing metadata 0 141 QPDFWriter not compressing metadata 0
144 QPDF_encryption aes decode string 0 142 QPDF_encryption aes decode string 0
145 -QPDFWriter forcing object stream disable 0  
146 QPDFWriter forced version disabled encryption 0 143 QPDFWriter forced version disabled encryption 0
147 qpdf-c called qpdf_set_r4_encryption_parameters_insecure 0 144 qpdf-c called qpdf_set_r4_encryption_parameters_insecure 0
148 qpdf-c called qpdf_set_static_aes_IV 0 145 qpdf-c called qpdf_set_static_aes_IV 0
@@ -203,10 +200,8 @@ QPDFJob pages encryption password 0 @@ -203,10 +200,8 @@ QPDFJob pages encryption password 0
203 QPDFTokenizer EOF reading token 0 200 QPDFTokenizer EOF reading token 0
204 QPDFTokenizer EOF reading appendable token 0 201 QPDFTokenizer EOF reading appendable token 0
205 QPDFWriter extra header text no newline 0 202 QPDFWriter extra header text no newline 0
206 -QPDFWriter extra header text add newline 0  
207 QPDF bogus 0 offset 0 203 QPDF bogus 0 offset 0
208 QPDF global offset 0 204 QPDF global offset 0
209 -QPDFWriter increasing extension level 0  
210 QPDFWriter make Extensions direct 0 205 QPDFWriter make Extensions direct 0
211 QPDFWriter make ADBE direct 1 206 QPDFWriter make ADBE direct 1
212 QPDFWriter preserve Extensions 0 207 QPDFWriter preserve Extensions 0