summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--libqpdf/QPDFWriter.cc28
-rw-r--r--qpdf/qpdf.testcov1
3 files changed, 33 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 35b78e91..0c43cd83 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-07-15 Jay Berkenbilt <ejb@ql.org>
+
+ * libqpdf/QPDFWriter.cc (copyEncryptionParameters): Bug fix: qpdf
+ was not preserving whether or not AES encryption was being used
+ when copying encryption parameters.
+
2012-07-14 Jay Berkenbilt <ejb@ql.org>
* QPDFWriter: add public copyEncryptionParameters to allow copying
diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc
index 96f3ff21..b5daab23 100644
--- a/libqpdf/QPDFWriter.cc
+++ b/libqpdf/QPDFWriter.cc
@@ -409,10 +409,34 @@ QPDFWriter::copyEncryptionParameters(QPDF& qpdf)
this->encrypt_metadata =
encrypt.getKey("/EncryptMetadata").getBoolValue();
}
+ if (V >= 4)
+ {
+ if (encrypt.hasKey("/CF") &&
+ encrypt.getKey("/CF").isDictionary() &&
+ encrypt.hasKey("/StmF") &&
+ encrypt.getKey("/StmF").isName())
+ {
+ // Determine whether to use AES from StmF. QPDFWriter
+ // can't write files with different StrF and StmF.
+ QPDFObjectHandle CF = encrypt.getKey("/CF");
+ QPDFObjectHandle StmF = encrypt.getKey("/StmF");
+ if (CF.hasKey(StmF.getName()) &&
+ CF.getKey(StmF.getName()).isDictionary())
+ {
+ QPDFObjectHandle StmF_data = CF.getKey(StmF.getName());
+ if (StmF_data.hasKey("/CFM") &&
+ StmF_data.getKey("/CFM").isName() &&
+ StmF_data.getKey("/CFM").getName() == "/AESV2")
+ {
+ this->encrypt_use_aes = true;
+ }
+ }
+ }
+ }
QTC::TC("qpdf", "QPDFWriter copy encrypt metadata",
this->encrypt_metadata ? 0 : 1);
- this->id1 =
- trailer.getKey("/ID").getArrayItem(0).getStringValue();
+ QTC::TC("qpdf", "QPDFWriter copy use_aes",
+ this->encrypt_use_aes ? 0 : 1);
setEncryptionParametersInternal(
V,
encrypt.getKey("/R").getIntValue(),
diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov
index a570f642..c51e527b 100644
--- a/qpdf/qpdf.testcov
+++ b/qpdf/qpdf.testcov
@@ -234,3 +234,4 @@ QPDF replace foreign indirect with null 0
QPDF not copying pages object 0
QPDF insert foreign page 0
QPDFWriter foreign object 0
+QPDFWriter copy use_aes 1