diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-10-03 21:03:09 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-10-04 09:06:16 +0200 |
commit | 32dfaf1e23496599169b8eae163b733975cfed2e (patch) | |
tree | 759cbc3bc72e7694ad1c320fbd4d6408cbd5c676 /xmlsecurity/source | |
parent | ae882ec4d76f54b4e765aa513e8f7f4bef7a53c5 (diff) |
xmlsecurity nss: avoid deleting the dsig context manually
Change-Id: I0198c1b0d6ba6c27072376943895718d536a284c
Reviewed-on: https://gerrit.libreoffice.org/61323
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'xmlsecurity/source')
-rw-r--r-- | xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx index 5eaec91e6ecc..1dc7b735c94e 100644 --- a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx +++ b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx @@ -51,6 +51,10 @@ template <> struct default_delete<xmlSecKeysMngr> { void operator()(xmlSecKeysMngrPtr ptr) { SecurityEnvironment_NssImpl::destroyKeysManager(ptr); } }; +template <> struct default_delete<xmlSecDSigCtx> +{ + void operator()(xmlSecDSigCtxPtr ptr) { xmlSecDSigCtxDestroy(ptr); } +}; } class XMLSignature_NssImpl @@ -86,7 +90,6 @@ SAL_CALL XMLSignature_NssImpl::generate( const Reference< XSecurityEnvironment >& aEnvironment ) { - xmlSecDSigCtxPtr pDsigCtx = nullptr ; xmlNodePtr pNode = nullptr ; if( !aTemplate.is() ) @@ -140,7 +143,7 @@ SAL_CALL XMLSignature_NssImpl::generate( } //Create Signature context - pDsigCtx = xmlSecDSigCtxCreate(pMngr.get()); + std::unique_ptr<xmlSecDSigCtx> pDsigCtx(xmlSecDSigCtxCreate(pMngr.get())); if( pDsigCtx == nullptr ) { //throw XMLSignatureException() ; @@ -149,7 +152,7 @@ SAL_CALL XMLSignature_NssImpl::generate( } //Sign the template - if( xmlSecDSigCtxSign( pDsigCtx , pNode ) == 0 ) + if( xmlSecDSigCtxSign( pDsigCtx.get() , pNode ) == 0 ) { if (pDsigCtx->status == xmlSecDSigStatusSucceeded) aTemplate->setStatus(css::xml::crypto::SecurityOperationStatus_OPERATION_SUCCEEDED); @@ -161,9 +164,6 @@ SAL_CALL XMLSignature_NssImpl::generate( aTemplate->setStatus(css::xml::crypto::SecurityOperationStatus_UNKNOWN); } - - xmlSecDSigCtxDestroy( pDsigCtx ) ; - //Unregistered the stream/URI binding if( xUriBinding.is() ) xmlUnregisterStreamInputCallbacks() ; @@ -178,7 +178,6 @@ SAL_CALL XMLSignature_NssImpl::validate( const Reference< XXMLSignatureTemplate >& aTemplate , const Reference< XXMLSecurityContext >& aSecurityCtx ) { - xmlSecDSigCtxPtr pDsigCtx = nullptr ; xmlNodePtr pNode = nullptr ; //sal_Bool valid ; @@ -235,7 +234,7 @@ SAL_CALL XMLSignature_NssImpl::validate( } //Create Signature context - pDsigCtx = xmlSecDSigCtxCreate(pMngr.get()); + std::unique_ptr<xmlSecDSigCtx> pDsigCtx(xmlSecDSigCtxCreate(pMngr.get())); if( pDsigCtx == nullptr ) { clearErrorRecorder(); @@ -246,7 +245,7 @@ SAL_CALL XMLSignature_NssImpl::validate( pDsigCtx->keyInfoReadCtx.flags |= XMLSEC_KEYINFO_FLAGS_X509DATA_DONT_VERIFY_CERTS; //Verify signature - int rs = xmlSecDSigCtxVerify( pDsigCtx , pNode ); + int rs = xmlSecDSigCtxVerify( pDsigCtx.get() , pNode ); // Also verify manifest: this is empty for ODF, but contains everything (except signature metadata) for OOXML. xmlSecSize nReferenceCount = xmlSecPtrListGetSize(&pDsigCtx->manifestReferences); @@ -265,14 +264,12 @@ SAL_CALL XMLSignature_NssImpl::validate( if (rs == 0 && pDsigCtx->status == xmlSecDSigStatusSucceeded && nReferenceCount == nReferenceGood) { aTemplate->setStatus(css::xml::crypto::SecurityOperationStatus_OPERATION_SUCCEEDED); - xmlSecDSigCtxDestroy( pDsigCtx ) ; break; } else { aTemplate->setStatus(css::xml::crypto::SecurityOperationStatus_UNKNOWN); } - xmlSecDSigCtxDestroy( pDsigCtx ) ; } |