diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2014-09-12 14:09:34 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-09-15 14:14:55 +0000 |
commit | 0442fd0936be714284feb8d36d3389a7ffcb87c8 (patch) | |
tree | 095e7df354ab2789d6dc571827c7b0c6a829719a | |
parent | 40716a03b60e4d5014a2ddf194f02a474b122a18 (diff) |
fdo#66701 - don't double destroy the HASH when PDF signing.
Accidentally introduced in d73c039fa it seems.
Change-Id: I846314ebca3a24520492887d4d9027f812cfb32f
Reviewed-on: https://gerrit.libreoffice.org/11455
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | vcl/source/gdi/pdfwriter_impl.cxx | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 3e083e2351cd..2f44dd57744f 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -5945,6 +5945,17 @@ char *PDFSigningPKCS7PasswordCallback(PK11SlotInfo * /*slot*/, PRBool /*retry*/, return (char *)arg; } +namespace { + class HashContextScope { + HASHContext *mpPtr; + public: + HashContextScope(HASHContext *pPtr) : mpPtr(pPtr) {} + ~HashContextScope() { clear(); } + void clear() { if (mpPtr) { HASH_Destroy(mpPtr); } mpPtr = NULL; } + HASHContext *get() { return mpPtr; } + }; +} + bool PDFWriterImpl::finalizeSignature() { @@ -5994,9 +6005,8 @@ bool PDFWriterImpl::finalizeSignature() // Prepare buffer and calculate PDF file digest CHECK_RETURN( (osl_File_E_None == osl_setFilePos( m_aFile, osl_Pos_Absolut, 0) ) ); - boost::scoped_ptr<HASHContext> hc(HASH_Create(HASH_AlgSHA1)); - - if (!hc) + HashContextScope hc(HASH_Create(HASH_AlgSHA1)); + if (!hc.get()) { SAL_WARN("vcl.gdi", "PDF Signing: SHA1 HASH_Create failed!"); return false; @@ -6027,7 +6037,7 @@ bool PDFWriterImpl::finalizeSignature() unsigned char hash[SHA1_LENGTH]; digest.data = hash; HASH_End(hc.get(), digest.data, &digest.len, SHA1_LENGTH); - HASH_Destroy(hc.get()); + hc.clear(); const char *pass = OUStringToOString( m_aContext.SignPassword, RTL_TEXTENCODING_UTF8 ).getStr(); |