diff options
author | jfhumann <j.f.humann@gmail.com> | 2014-04-26 01:21:06 +0200 |
---|---|---|
committer | jfhumann <j.f.humann@gmail.com> | 2014-04-26 01:21:06 +0200 |
commit | f2b7cb138f6ad271d3312ff6c20ed4448f9b0d50 (patch) | |
tree | 1afa34b014c423148277c52d7970022c06f812bc /src/Protocol | |
parent | Fix for minor resource leak (CID 43616) (diff) | |
download | cuberite-f2b7cb138f6ad271d3312ff6c20ed4448f9b0d50.tar cuberite-f2b7cb138f6ad271d3312ff6c20ed4448f9b0d50.tar.gz cuberite-f2b7cb138f6ad271d3312ff6c20ed4448f9b0d50.tar.bz2 cuberite-f2b7cb138f6ad271d3312ff6c20ed4448f9b0d50.tar.lz cuberite-f2b7cb138f6ad271d3312ff6c20ed4448f9b0d50.tar.xz cuberite-f2b7cb138f6ad271d3312ff6c20ed4448f9b0d50.tar.zst cuberite-f2b7cb138f6ad271d3312ff6c20ed4448f9b0d50.zip |
Diffstat (limited to '')
-rw-r--r-- | src/Protocol/Authenticator.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/Protocol/Authenticator.cpp b/src/Protocol/Authenticator.cpp index e0fcc0007..bbc656eda 100644 --- a/src/Protocol/Authenticator.cpp +++ b/src/Protocol/Authenticator.cpp @@ -165,6 +165,10 @@ bool cAuthenticator::AuthWithYggdrasil(AString & a_UserName, const AString & a_S if ((ret = ctr_drbg_init(&ctr_drbg, entropy_func, &entropy, (const unsigned char *)pers, strlen(pers))) != 0) { LOGWARNING("cAuthenticator: ctr_drbg_init returned %d", ret); + + // Free all resources which have been initialized up to this line + x509_crt_free(&cacert); + entropy_free(&entropy); return false; } @@ -175,6 +179,10 @@ bool cAuthenticator::AuthWithYggdrasil(AString & a_UserName, const AString & a_S if (ret < 0) { LOGWARNING("cAuthenticator: x509_crt_parse returned -0x%x", -ret); + + // Free all resources which have been initialized up to this line + x509_crt_free(&cacert); + entropy_free(&entropy); return false; } @@ -182,6 +190,10 @@ bool cAuthenticator::AuthWithYggdrasil(AString & a_UserName, const AString & a_S if ((ret = net_connect(&server_fd, m_Server.c_str(), 443)) != 0) { LOGWARNING("cAuthenticator: Can't connect to %s: %d", m_Server.c_str(), ret); + + // Free all resources which have been initialized up to this line + x509_crt_free(&cacert); + entropy_free(&entropy); return false; } @@ -189,6 +201,13 @@ bool cAuthenticator::AuthWithYggdrasil(AString & a_UserName, const AString & a_S if ((ret = ssl_init(&ssl)) != 0) { LOGWARNING("cAuthenticator: ssl_init returned %d", ret); + + // Free all resources which have been initialized up to this line + x509_crt_free(&cacert); + net_close(server_fd); + ssl_free(&ssl); + entropy_free(&entropy); + memset(&ssl, 0, sizeof(ssl)); return false; } ssl_set_endpoint(&ssl, SSL_IS_CLIENT); @@ -203,6 +222,13 @@ bool cAuthenticator::AuthWithYggdrasil(AString & a_UserName, const AString & a_S if ((ret != POLARSSL_ERR_NET_WANT_READ) && (ret != POLARSSL_ERR_NET_WANT_WRITE)) { LOGWARNING("cAuthenticator: ssl_handshake returned -0x%x", -ret); + + // Free all resources which have been initialized up to this line + x509_crt_free(&cacert); + net_close(server_fd); + ssl_free(&ssl); + entropy_free(&entropy); + memset(&ssl, 0, sizeof(ssl)); return false; } } @@ -223,6 +249,13 @@ bool cAuthenticator::AuthWithYggdrasil(AString & a_UserName, const AString & a_S if (ret <= 0) { LOGWARNING("cAuthenticator: ssl_write returned %d", ret); + + // Free all resources which have been initialized up to this line + x509_crt_free(&cacert); + net_close(server_fd); + ssl_free(&ssl); + entropy_free(&entropy); + memset(&ssl, 0, sizeof(ssl)); return false; } |