Changeset: 447b41836e9d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/447b41836e9d
Modified Files:
clients/mapilib/connect.c
clients/mapilib/connect_openssl.c
clients/mapilib/msettings.c
Branch: monetdburl
Log Message:
Fix some memory leaks
diffs (60 lines):
diff --git a/clients/mapilib/connect.c b/clients/mapilib/connect.c
--- a/clients/mapilib/connect.c
+++ b/clients/mapilib/connect.c
@@ -649,6 +649,7 @@ mapi_handshake(Mapi mid)
sprintf(replacement_password, "\1%s", pwdhash);
free(pwdhash);
msettings_error errmsg = msetting_set_string(mid->settings,
MP_PASSWORD, replacement_password);
+ free(replacement_password);
if (errmsg != NULL) {
close_connection(mid);
return mapi_setError(mid, "could not stow hashed
password", __func__, MERROR);
diff --git a/clients/mapilib/connect_openssl.c
b/clients/mapilib/connect_openssl.c
--- a/clients/mapilib/connect_openssl.c
+++ b/clients/mapilib/connect_openssl.c
@@ -102,10 +102,6 @@ wrap_tls(Mapi mid, SOCKET sock)
int port = msettings_connect_port(settings);
size_t hostlen = strlen(host);
size_t hostportlen = hostlen + 1 + 20;
- char *hostcolonport = malloc(hostportlen);
- if (hostcolonport == NULL)
- return mapi_setError(mid, "malloc failed", __func__, MERROR);
- snprintf(hostcolonport, hostportlen, "%s:%d", host, port);
// Clear any earlier errrors
do {} while (ERR_get_error() != 0);
@@ -185,14 +181,21 @@ wrap_tls(Mapi mid, SOCKET sock)
return croak(mid, __func__, "BIO_up_ref bio");
}
// On error: free 'bio' twice
- stream *rstream = openssl_rstream(hostcolonport, bio);
+
+ char *hostcolonport = malloc(hostportlen);
+ if (hostcolonport != NULL)
+ snprintf(hostcolonport, hostportlen, "%s:%d", host, port);
+
+ stream *rstream = openssl_rstream(hostcolonport ? hostcolonport : "ssl
rstream", bio);
if (rstream == NULL || mnstr_errnr(rstream) != MNSTR_NO__ERROR) {
BIO_free_all(bio); // drops first ref
BIO_free_all(bio); // drops second ref
+ free(hostcolonport);
return croak(mid, __func__, "openssl_rstream: %s",
mnstr_peek_error(rstream));
}
// On error: free 'bio' and close 'rstream'.
- stream *wstream = openssl_wstream(hostcolonport, bio);
+ stream *wstream = openssl_wstream(hostcolonport ? hostcolonport : "ssl
wstream", bio);
+ free(hostcolonport);
if (wstream == NULL || mnstr_errnr(wstream) != MNSTR_NO__ERROR) {
BIO_free_all(bio);
mnstr_close(rstream);
diff --git a/clients/mapilib/msettings.c b/clients/mapilib/msettings.c
--- a/clients/mapilib/msettings.c
+++ b/clients/mapilib/msettings.c
@@ -667,6 +667,7 @@ msettings_validate(msettings *mp, char *
// compute this here so the getter function can take const msettings*
const char *sockdir = msettings_connect_sockdir(mp);
long effective_port = msettings_connect_port(mp);
+ free(mp->unix_sock_name_buffer);
mp->unix_sock_name_buffer = allocprintf("%s/.s.monetdb.%ld", sockdir,
effective_port);
if (mp->unix_sock_name_buffer == NULL)
return false;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]