Commit 44fa03c64e66426981403ff2102613a0865cadd4
1 parent
3575c062
Refactor `QPDFWriter`: move methods `setMinimumPDFVersion`, `parseVersion`,`disa…
…bleIncompatibleEncryption` and `compareVersions` to `QPDFWriter::Members`. Remove outdated test coverage entries.
Showing
3 changed files
with
38 additions
and
40 deletions
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& version, int& major, int& 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 | ... | ... |