[Libreoffice-commits] core.git: vcl/source
Miklos Vajna
vmiklos at collabora.co.uk
Tue Nov 29 13:56:04 UTC 2016
vcl/source/gdi/pdfwriter_impl.cxx | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
New commits:
commit 5bf32e4e78ffbe34f3b2840a9677ded34e5b4da7
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Tue Nov 29 12:03:39 2016 +0100
vcl mscrypto PDF sign: don't assume that header length is always 2 bytes
For now just assert that the short form doesn't try to handle larger
values than expected, the long form has to be implemented once we hit
the assert.
Change-Id: Ib2b17b4e3c5772b68fef84a41438a56e55799e8b
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index ed90f38..2cbd8cb 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -6774,6 +6774,14 @@ typedef BOOL (WINAPI *PointerTo_CryptRetrieveTimeStamp)(LPCWSTR wszUrl,
namespace
{
+
+/// Counts how many bytes are needed to encode a given length.
+size_t GetLengthOfLength(size_t nLength)
+{
+ assert(nLength <= 127);
+ return 1;
+}
+
/// Create payload for the 'signing-certificate' signed attribute.
bool CreateSigningCertificateAttribute(vcl::PDFWriter::PDFSignContext& rContext, SvStream& rEncodedCertificate)
{
@@ -6832,12 +6840,12 @@ bool CreateSigningCertificateAttribute(vcl::PDFWriter::PDFSignContext& rContext,
// NULL: parameters
// OCTET STRING: certHash
- size_t nAlgorithm = aSHA256.size() + 2;
- size_t nParameters = 2;
- size_t nAlgorithmIdentifier = nAlgorithm + nParameters + 2;
- size_t nCertHash = aHash.size() + 2;
- size_t nESSCertIDv2 = nAlgorithmIdentifier + nCertHash + 2;
- size_t nESSCertIDv2s = nESSCertIDv2 + 2;
+ size_t nAlgorithm = 1 + GetLengthOfLength(aSHA256.size()) + aSHA256.size();
+ size_t nParameters = 1 + GetLengthOfLength(1);
+ size_t nAlgorithmIdentifier = 1 + GetLengthOfLength(nAlgorithm + nParameters) + nAlgorithm + nParameters;
+ size_t nCertHash = 1 + GetLengthOfLength(aHash.size()) + aHash.size();
+ size_t nESSCertIDv2 = 1 + GetLengthOfLength(nAlgorithmIdentifier + nCertHash) + nAlgorithmIdentifier + nCertHash;
+ size_t nESSCertIDv2s = 1 + GetLengthOfLength(nESSCertIDv2) + nESSCertIDv2;
// Write SigningCertificateV2.
rEncodedCertificate.WriteUInt8(0x30);
More information about the Libreoffice-commits
mailing list