Kaydet (Commit) 181a1b36 authored tarafından Miklos Vajna's avatar Miklos Vajna

xmlsecurity: avoid repeated manual calls to PORT_FreeArena()

Change-Id: Id62a894b08e6221c858304d7cb198a5a3f0cbd43
Reviewed-on: https://gerrit.libreoffice.org/61893
Tested-by: Jenkins
Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
üst 8ba20167
......@@ -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 ;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment