From 44fa03c64e66426981403ff2102613a0865cadd4 Mon Sep 17 00:00:00 2001 From: m-holger Date: Fri, 12 Sep 2025 11:45:35 +0100 Subject: [PATCH] Refactor `QPDFWriter`: move methods `setMinimumPDFVersion`, `parseVersion`,`disableIncompatibleEncryption` and `compareVersions` to `QPDFWriter::Members`. Remove outdated test coverage entries. --- include/qpdf/QPDFWriter.hh | 3 --- libqpdf/QPDFWriter.cc | 70 ++++++++++++++++++++++++++++++++++++++-------------------------------- qpdf/qpdf.testcov | 5 ----- 3 files changed, 38 insertions(+), 40 deletions(-) diff --git a/include/qpdf/QPDFWriter.hh b/include/qpdf/QPDFWriter.hh index be9c32e..b6a3c9a 100644 --- a/include/qpdf/QPDFWriter.hh +++ b/include/qpdf/QPDFWriter.hh @@ -505,9 +505,6 @@ class QPDFWriter bool allow_modify_other, qpdf_r3_print_e print, qpdf_r3_modify_e modify); - void disableIncompatibleEncryption(int major, int minor, int extension_level); - void parseVersion(std::string const& version, int& major, int& minor) const; - int compareVersions(int major1, int minor1, int major2, int minor2) const; void setEncryptionParameters(char const* user_password, char const* owner_password); void setEncryptionMinimumVersion(); void setDataKey(int objid); diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc index e6833fb..8a91911 100644 --- a/libqpdf/QPDFWriter.cc +++ b/libqpdf/QPDFWriter.cc @@ -284,6 +284,12 @@ class QPDFWriter::Members delete output_buffer; } + void setMinimumPDFVersion(std::string const& version, int extension_level); + + void disableIncompatibleEncryption(int major, int minor, int extension_level); + void parseVersion(std::string const& version, int& major, int& minor) const; + int compareVersions(int major1, int minor1, int major2, int minor2) const; + private: QPDFWriter& w; QPDF& pdf; @@ -381,11 +387,9 @@ QPDFWriter::setOutputFilename(char const* filename) bool close_file = false; if (filename == nullptr) { description = "standard output"; - QTC::TC("qpdf", "QPDFWriter write to stdout"); f = stdout; QUtil::binary_stdout(); } else { - QTC::TC("qpdf", "QPDFWriter write to file"); f = QUtil::safe_fopen(filename, "wb+"); close_file = true; } @@ -508,9 +512,15 @@ QPDFWriter::setNewlineBeforeEndstream(bool val) void QPDFWriter::setMinimumPDFVersion(std::string const& version, int extension_level) { + m->setMinimumPDFVersion(version, extension_level); +} + +void +QPDFWriter::Members::setMinimumPDFVersion(std::string const& version, int extension_level) +{ bool set_version = false; bool set_extension_level = false; - if (m->min_pdf_version.empty()) { + if (min_pdf_version.empty()) { set_version = true; set_extension_level = true; } else { @@ -519,25 +529,24 @@ QPDFWriter::setMinimumPDFVersion(std::string const& version, int extension_level int min_major = 0; int min_minor = 0; parseVersion(version, old_major, old_minor); - parseVersion(m->min_pdf_version, min_major, min_minor); + parseVersion(min_pdf_version, min_major, min_minor); int compare = compareVersions(old_major, old_minor, min_major, min_minor); if (compare > 0) { QTC::TC("qpdf", "QPDFWriter increasing minimum version", extension_level == 0 ? 0 : 1); set_version = true; set_extension_level = true; } else if (compare == 0) { - if (extension_level > m->min_extension_level) { - QTC::TC("qpdf", "QPDFWriter increasing extension level"); + if (extension_level > min_extension_level) { set_extension_level = true; } } } if (set_version) { - m->min_pdf_version = version; + min_pdf_version = version; } if (set_extension_level) { - m->min_extension_level = extension_level; + min_extension_level = extension_level; } } @@ -562,7 +571,6 @@ QPDFWriter::setExtraHeaderText(std::string const& text) { m->extra_header_text = text; if (!m->extra_header_text.empty() && *m->extra_header_text.rbegin() != '\n') { - QTC::TC("qpdf", "QPDFWriter extra header text add newline"); m->extra_header_text += "\n"; } else { QTC::TC("qpdf", "QPDFWriter extra header text no newline"); @@ -913,44 +921,44 @@ QPDFWriter::copyEncryptionParameters(QPDF& qpdf) } void -QPDFWriter::disableIncompatibleEncryption(int major, int minor, int extension_level) +QPDFWriter::Members::disableIncompatibleEncryption(int major, int minor, int extension_level) { - if (!m->encryption) { + if (!encryption) { return; } if (compareVersions(major, minor, 1, 3) < 0) { - m->encryption = nullptr; + encryption = nullptr; return; } - int V = m->encryption->getV(); - int R = m->encryption->getR(); + int V = encryption->getV(); + int R = encryption->getR(); if (compareVersions(major, minor, 1, 4) < 0) { if (V > 1 || R > 2) { - m->encryption = nullptr; + encryption = nullptr; } } else if (compareVersions(major, minor, 1, 5) < 0) { if (V > 2 || R > 3) { - m->encryption = nullptr; + encryption = nullptr; } } else if (compareVersions(major, minor, 1, 6) < 0) { - if (m->encrypt_use_aes) { - m->encryption = nullptr; + if (encrypt_use_aes) { + encryption = nullptr; } } else if ( (compareVersions(major, minor, 1, 7) < 0) || ((compareVersions(major, minor, 1, 7) == 0) && extension_level < 3)) { if (V >= 5 || R >= 5) { - m->encryption = nullptr; + encryption = nullptr; } } - if (!m->encryption) { + if (!encryption) { QTC::TC("qpdf", "QPDFWriter forced version disabled encryption"); } } void -QPDFWriter::parseVersion(std::string const& version, int& major, int& minor) const +QPDFWriter::Members::parseVersion(std::string const& version, int& major, int& minor) const { major = QUtil::string_to_int(version.c_str()); minor = 0; @@ -967,19 +975,18 @@ QPDFWriter::parseVersion(std::string const& version, int& major, int& minor) con } int -QPDFWriter::compareVersions(int major1, int minor1, int major2, int minor2) const +QPDFWriter::Members::compareVersions(int major1, int minor1, int major2, int minor2) const { if (major1 < major2) { return -1; - } else if (major1 > major2) { + } + if (major1 > major2) { return 1; - } else if (minor1 < minor2) { + } + if (minor1 < minor2) { return -1; - } else if (minor1 > minor2) { - return 1; - } else { - return 0; } + return minor1 > minor2 ? 1 : 0; } void @@ -2170,10 +2177,9 @@ QPDFWriter::doWriteSetup() if (!m->forced_pdf_version.empty()) { int major = 0; int minor = 0; - parseVersion(m->forced_pdf_version, major, minor); - disableIncompatibleEncryption(major, minor, m->forced_extension_level); - if (compareVersions(major, minor, 1, 5) < 0) { - QTC::TC("qpdf", "QPDFWriter forcing object stream disable"); + m->parseVersion(m->forced_pdf_version, major, minor); + m->disableIncompatibleEncryption(major, minor, m->forced_extension_level); + if (m->compareVersions(major, minor, 1, 5) < 0) { m->object_stream_mode = qpdf_o_disable; } } diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov index db7c792..39e73b9 100644 --- a/qpdf/qpdf.testcov +++ b/qpdf/qpdf.testcov @@ -40,8 +40,6 @@ main QTest array indirect 1 main QTest dictionary 0 main QTest dictionary indirect 1 main QTest stream 0 -QPDFWriter write to stdout 0 -QPDFWriter write to file 0 QPDF lin write nshared_total > nshared_first_page 1 QPDFWriter encrypted hint stream 0 QPDF opt inherited scalar 0 @@ -142,7 +140,6 @@ qpdf-c called qpdf_init_write multiple times 0 QPDF_encryption rc4 decode string 0 QPDFWriter not compressing metadata 0 QPDF_encryption aes decode string 0 -QPDFWriter forcing object stream disable 0 QPDFWriter forced version disabled encryption 0 qpdf-c called qpdf_set_r4_encryption_parameters_insecure 0 qpdf-c called qpdf_set_static_aes_IV 0 @@ -203,10 +200,8 @@ QPDFJob pages encryption password 0 QPDFTokenizer EOF reading token 0 QPDFTokenizer EOF reading appendable token 0 QPDFWriter extra header text no newline 0 -QPDFWriter extra header text add newline 0 QPDF bogus 0 offset 0 QPDF global offset 0 -QPDFWriter increasing extension level 0 QPDFWriter make Extensions direct 0 QPDFWriter make ADBE direct 1 QPDFWriter preserve Extensions 0 -- libgit2 0.21.4