fixed small memleak in authssl

This commit is contained in:
csoler 2021-01-10 21:09:14 +01:00
parent 78628a1842
commit faa09ea55a
2 changed files with 21 additions and 5 deletions

View File

@ -308,6 +308,20 @@ AuthSSLimpl::AuthSSLimpl() :
p3Config(), sslctx(nullptr), mOwnCert(nullptr), sslMtx("AuthSSL"), p3Config(), sslctx(nullptr), mOwnCert(nullptr), sslMtx("AuthSSL"),
mOwnPrivateKey(nullptr), mOwnPublicKey(nullptr), init(0) {} mOwnPrivateKey(nullptr), mOwnPublicKey(nullptr), init(0) {}
AuthSSLimpl::~AuthSSLimpl()
{
RS_STACK_MUTEX(sslMtx);
SSL_CTX_free(sslctx);
X509_free(mOwnCert);
EVP_PKEY_free(mOwnPrivateKey);
EVP_PKEY_free(mOwnPublicKey);
for(auto pcert: mCerts)
X509_free(pcert.second);
}
bool AuthSSLimpl::active() { return init; } bool AuthSSLimpl::active() { return init; }
int AuthSSLimpl::InitAuth( int AuthSSLimpl::InitAuth(
@ -1459,14 +1473,14 @@ bool AuthSSLimpl::encrypt(void *&out, int &outlen, const void *in, int inlen,
if (peerId == mOwnId) { public_key = mOwnPublicKey; } if (peerId == mOwnId) { public_key = mOwnPublicKey; }
else else
{ {
if (!mCerts[peerId]) auto it = mCerts.find(peerId);
if (it == mCerts.end())
{ {
RsErr() << __PRETTY_FUNCTION__ << " public key not found." RsErr() << __PRETTY_FUNCTION__ << " public key not found." << std::endl;
<< std::endl;
return false; return false;
} }
else public_key = const_cast<EVP_PKEY*>( else public_key = const_cast<EVP_PKEY*>( RsX509Cert::getPubKey(*it->second) );
RsX509Cert::getPubKey(*mCerts[peerId]) );
} }
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();

View File

@ -161,6 +161,8 @@ public:
/** Initialisation Functions (Unique) */ /** Initialisation Functions (Unique) */
AuthSSLimpl(); AuthSSLimpl();
virtual ~AuthSSLimpl();
bool validateOwnCertificate(X509 *x509, EVP_PKEY *pkey) override; bool validateOwnCertificate(X509 *x509, EVP_PKEY *pkey) override;
bool active() override; bool active() override;