From 5508f74603d7a816ab67456939bd3ee57676f842 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 9 Nov 2019 11:29:52 -0500 Subject: Allow /P in encryption dictionary to be positive (fixes #382) Even though this is disallowed by the spec, files like this have been encountered in the wild. --- libqpdf/QPDFPageObjectHelper.cc | 1 + libqpdf/QPDFWriter.cc | 2 +- libqpdf/QPDF_encryption.cc | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) (limited to 'libqpdf') diff --git a/libqpdf/QPDFPageObjectHelper.cc b/libqpdf/QPDFPageObjectHelper.cc index 8ecd0144..d588c322 100644 --- a/libqpdf/QPDFPageObjectHelper.cc +++ b/libqpdf/QPDFPageObjectHelper.cc @@ -661,6 +661,7 @@ QPDFPageObjectHelper::getFormXObjectForPage(bool handle_transformations) return result; } +// ABI: name should be std:string const& std::string QPDFPageObjectHelper::placeFormXObject( QPDFObjectHandle fo, std::string name, diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc index a31f5da9..7b769ae4 100644 --- a/libqpdf/QPDFWriter.cc +++ b/libqpdf/QPDFWriter.cc @@ -762,7 +762,7 @@ QPDFWriter::copyEncryptionParameters(QPDF& qpdf) V, encrypt.getKey("/R").getIntValueAsInt(), key_len, - encrypt.getKey("/P").getIntValueAsInt(), + static_cast(encrypt.getKey("/P").getIntValue()), encrypt.getKey("/O").getStringValue(), encrypt.getKey("/U").getStringValue(), OE, diff --git a/libqpdf/QPDF_encryption.cc b/libqpdf/QPDF_encryption.cc index 5a6735ee..9880face 100644 --- a/libqpdf/QPDF_encryption.cc +++ b/libqpdf/QPDF_encryption.cc @@ -877,7 +877,7 @@ QPDF::initializeEncryption() int R = encryption_dict.getKey("/R").getIntValueAsInt(); std::string O = encryption_dict.getKey("/O").getStringValue(); std::string U = encryption_dict.getKey("/U").getStringValue(); - int P = encryption_dict.getKey("/P").getIntValueAsInt(); + int P = static_cast(encryption_dict.getKey("/P").getIntValue()); // If supporting new encryption R/V values, remember to update // error message inside this if statement. @@ -1448,7 +1448,7 @@ QPDF::isEncrypted(int& R, int& P, int& V, QPDFObjectHandle Pkey = encrypt.getKey("/P"); QPDFObjectHandle Rkey = encrypt.getKey("/R"); QPDFObjectHandle Vkey = encrypt.getKey("/V"); - P = Pkey.getIntValueAsInt(); + P = static_cast(Pkey.getIntValue()); R = Rkey.getIntValueAsInt(); V = Vkey.getIntValueAsInt(); stream_method = this->m->encp->cf_stream; -- cgit v1.2.3-54-g00ecf