diff --git a/libretroshare/src/pqi/authssl.cc b/libretroshare/src/pqi/authssl.cc index a31970ba0..eb89a1ed5 100644 --- a/libretroshare/src/pqi/authssl.cc +++ b/libretroshare/src/pqi/authssl.cc @@ -308,6 +308,20 @@ AuthSSLimpl::AuthSSLimpl() : p3Config(), sslctx(nullptr), mOwnCert(nullptr), sslMtx("AuthSSL"), 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; } 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; } else { - if (!mCerts[peerId]) + auto it = mCerts.find(peerId); + + if (it == mCerts.end()) { - RsErr() << __PRETTY_FUNCTION__ << " public key not found." - << std::endl; + RsErr() << __PRETTY_FUNCTION__ << " public key not found." << std::endl; return false; } - else public_key = const_cast( - RsX509Cert::getPubKey(*mCerts[peerId]) ); + else public_key = const_cast( RsX509Cert::getPubKey(*it->second) ); } EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); diff --git a/libretroshare/src/pqi/authssl.h b/libretroshare/src/pqi/authssl.h index b63bd0e7a..ddd5dc86d 100644 --- a/libretroshare/src/pqi/authssl.h +++ b/libretroshare/src/pqi/authssl.h @@ -161,6 +161,8 @@ public: /** Initialisation Functions (Unique) */ AuthSSLimpl(); + virtual ~AuthSSLimpl(); + bool validateOwnCertificate(X509 *x509, EVP_PKEY *pkey) override; bool active() override; diff --git a/libretroshare/src/services/p3msgservice.cc b/libretroshare/src/services/p3msgservice.cc index 5b28e2949..5974d7bf3 100644 --- a/libretroshare/src/services/p3msgservice.cc +++ b/libretroshare/src/services/p3msgservice.cc @@ -115,6 +115,19 @@ RsServiceInfo p3MsgService::getServiceInfo() MSG_MIN_MINOR_VERSION); } +p3MsgService::~p3MsgService() +{ + RS_STACK_MUTEX(mMsgMtx); /********** STACK LOCKED MTX ******/ + + for(auto tag:mTags) delete tag.second; + for(auto tag:mMsgTags) delete tag.second; + for(auto msgid:mSrcIds) delete msgid.second; + for(auto parentid:mParentId) delete parentid.second; + for(auto img:imsg) delete img.second; + for(auto mout:msgOutgoing) delete mout.second; + + for(auto mpend:_pendingPartialMessages) delete mpend.second; +} uint32_t p3MsgService::getNewUniqueMsgId() { diff --git a/libretroshare/src/services/p3msgservice.h b/libretroshare/src/services/p3msgservice.h index 61f5261db..30ad1e135 100644 --- a/libretroshare/src/services/p3msgservice.h +++ b/libretroshare/src/services/p3msgservice.h @@ -56,6 +56,7 @@ class p3MsgService : { public: p3MsgService(p3ServiceControl *sc, p3IdService *id_service, p3GxsTrans& gxsMS); + virtual ~p3MsgService(); virtual RsServiceInfo getServiceInfo();