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