summaryrefslogtreecommitdiff
path: root/xmlsecurity
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2018-10-17 21:47:36 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2018-10-18 09:13:53 +0200
commit181a1b36ac728e3a43e054496ceb53fd3315abdb (patch)
treed7fe6b5bbb9a245a5deb74945af2570e3851d7aa /xmlsecurity
parent8ba20167034f38ea2984bc8fb0e785da107cb82b (diff)
xmlsecurity: avoid repeated manual calls to PORT_FreeArena()
Change-Id: Id62a894b08e6221c858304d7cb198a5a3f0cbd43 Reviewed-on: https://gerrit.libreoffice.org/61893 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'xmlsecurity')
-rw-r--r--xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx17
1 files changed, 10 insertions, 7 deletions
diff --git a/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
index ef68129496d6..86d68c522ed7 100644
--- a/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
+++ b/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
@@ -57,6 +57,14 @@ using ::com::sun::star::lang::XSingleServiceFactory ;
using ::com::sun::star::xml::crypto::XSecurityEnvironment ;
using ::com::sun::star::security::XCertificate ;
+namespace std
+{
+template <> struct default_delete<PRArenaPool>
+{
+ void operator()(PRArenaPool* ptr) { PORT_FreeArena(ptr, PR_FALSE); }
+};
+}
+
static X509Certificate_NssImpl* NssCertToXCert( CERTCertificate* cert ) ;
static X509Certificate_NssImpl* NssPrivKeyToXCert( SECKEYPrivateKey* ) ;
@@ -329,9 +337,7 @@ Reference< XCertificate > SecurityEnvironment_NssImpl::getCertificate( const OUS
CERTName* nmIssuer ;
char* chIssuer ;
SECItem* derIssuer ;
- PRArenaPool* arena ;
-
- arena = PORT_NewArena( DER_DEFAULT_CHUNKSIZE ) ;
+ std::unique_ptr<PRArenaPool> arena(PORT_NewArena(DER_DEFAULT_CHUNKSIZE));
if( arena == nullptr )
throw RuntimeException() ;
@@ -341,15 +347,13 @@ Reference< XCertificate > SecurityEnvironment_NssImpl::getCertificate( const OUS
nmIssuer = CERT_AsciiToName( chIssuer ) ;
if( nmIssuer == nullptr ) {
PL_strfree( chIssuer ) ;
- PORT_FreeArena( arena, PR_FALSE ) ;
return nullptr; // no need for exception cf. i40394
}
- derIssuer = SEC_ASN1EncodeItem( arena, nullptr, static_cast<void*>(nmIssuer), SEC_ASN1_GET( CERT_NameTemplate ) ) ;
+ derIssuer = SEC_ASN1EncodeItem( arena.get(), nullptr, static_cast<void*>(nmIssuer), SEC_ASN1_GET( CERT_NameTemplate ) ) ;
if( derIssuer == nullptr ) {
PL_strfree( chIssuer ) ;
CERT_DestroyName( nmIssuer ) ;
- PORT_FreeArena( arena, PR_FALSE ) ;
throw RuntimeException() ;
}
@@ -372,7 +376,6 @@ Reference< XCertificate > SecurityEnvironment_NssImpl::getCertificate( const OUS
CERT_DestroyName( nmIssuer ) ;
//SECITEM_FreeItem( derIssuer, PR_FALSE ) ;
CERT_DestroyCertificate( cert ) ;
- PORT_FreeArena( arena, PR_FALSE ) ;
} else {
xcert = nullptr ;
}