From 098a75b2b2f6a23b5740f6a2032d8a4c8d0d36b2 Mon Sep 17 00:00:00 2001 From: dequis Date: Sat, 21 Mar 2015 05:26:20 -0300 Subject: Fix a bunch of memory leaks - irc_im.c: - bee_irc_user_msg: strdup leaks when otr swallows messages - bee_irc_user_action_response: GString leak in all ctcp replies - otr.c: - call g_slist_free() on the list of the otr_policy setting - otr_filter_msg_in: call otrl_tlv_free() if "tlvs" are returned - otr_filter_msg_out: don't g_strdup() if the message should be ignored - log_otr_message: g_strdup_vprintf() leaks always - nogaim.c: - imcb_ask_auth/imcb_ask_add: leaks in g_strdup_printf() - imcb_ask_add leaks imcb_ask_cb_data if the user already exists - add imcb_ask_cb_free() to correctly free its data - msn_util.c: add msn_buddy_ask_free(), ditto - storage_xml.c: pass_cr/password if base64_decode or arc_decode fail - ssl_gnutls.c: conn->hostname leak in error conditions, like invalid certs - jabber_util.c: jabber_buddy_by_ext_jid() leaks jid if it's not an ext jid --- lib/ssl_gnutls.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'lib') diff --git a/lib/ssl_gnutls.c b/lib/ssl_gnutls.c index 749b00b6..2d52db52 100644 --- a/lib/ssl_gnutls.c +++ b/lib/ssl_gnutls.c @@ -123,6 +123,7 @@ void *ssl_connect(char *host, int port, gboolean verify, ssl_input_function func conn->fd = proxy_connect(host, port, ssl_connected, conn); if (conn->fd < 0) { + g_free(conn->hostname); g_free(conn); return NULL; } @@ -313,6 +314,7 @@ static gboolean ssl_connected(gpointer data, gint source, b_input_condition cond if (source == -1) { conn->func(conn->data, 0, NULL, cond); + g_free(conn->hostname); g_free(conn); return FALSE; } @@ -354,19 +356,13 @@ static gboolean ssl_handshake(gpointer data, gint source, b_input_condition cond } else { conn->func(conn->data, 0, NULL, cond); - gnutls_deinit(conn->session); - closesocket(conn->fd); - - g_free(conn); + ssl_disconnect(conn); } } else { if (conn->verify && (stver = verify_certificate_callback(conn->session)) != 0) { conn->func(conn->data, stver, NULL, cond); - gnutls_deinit(conn->session); - closesocket(conn->fd); - - g_free(conn); + ssl_disconnect(conn); } else { /* For now we can't handle non-blocking perfectly everywhere... */ sock_make_blocking(conn->fd); -- cgit v1.2.3