diff options
-rw-r--r-- | irc_im.c | 7 | ||||
-rw-r--r-- | lib/ssl_gnutls.c | 12 | ||||
-rw-r--r-- | otr.c | 15 | ||||
-rw-r--r-- | protocols/jabber/jabber_util.c | 1 | ||||
-rw-r--r-- | protocols/msn/msn_util.c | 20 | ||||
-rw-r--r-- | protocols/nogaim.c | 33 | ||||
-rw-r--r-- | storage_xml.c | 2 |
7 files changed, 56 insertions, 34 deletions
@@ -234,7 +234,7 @@ static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, t msg = s; } else { /* Modules can swallow messages. */ - return TRUE; + goto cleanup; } } } @@ -249,8 +249,9 @@ static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, t wrapped = word_wrap(msg, 425); irc_send_msg(iu, "PRIVMSG", dst, wrapped, prefix); - g_free(wrapped); + +cleanup: g_free(prefix); g_free(msg); g_free(ts); @@ -291,6 +292,8 @@ static gboolean bee_irc_user_action_response(bee_t *bee, bee_user_t *bu, const c irc_send_msg((irc_user_t *) bu->ui_data, "NOTICE", irc->user->nick, msg->str, NULL); + g_string_free(msg, TRUE); + return TRUE; } 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); @@ -286,11 +286,16 @@ gboolean otr_irc_new(irc_t *irc) void otr_irc_free(irc_t *irc) { + set_t *s; otr_t *otr = irc->otr; otr_disconnect_all(irc); b_event_remove(otr->timer); otrl_userstate_free(otr->us); + + s = set_find(&irc->b->set, "otr_policy"); + g_slist_free(s->eval_data); + if (otr->keygen) { kill(otr->keygen, SIGTERM); waitpid(otr->keygen, NULL, 0); @@ -434,6 +439,10 @@ char *otr_filter_msg_in(irc_user_t *iu, char *msg, int flags) ic->acc->user, ic->acc->prpl->name, iu->bu->handle, msg, &newmsg, &tlvs, NULL, NULL, NULL); + if (tlvs) { + otrl_tlv_free(tlvs); + } + if (ignore_msg) { /* this was an internal OTR protocol message */ return NULL; @@ -471,7 +480,7 @@ char *otr_filter_msg_out(irc_user_t *iu, char *msg, int flags) if (otrmsg && otrmsg != msg) { /* libotr wants us to replace our message */ /* NB: caller will free old msg */ - msg = g_strdup(otrmsg); + msg = st ? NULL : g_strdup(otrmsg); otrl_message_free(otrmsg); } @@ -1324,6 +1333,8 @@ void log_otr_message(void *opdata, const char *fmt, ...) va_end(va); log_message(LOGLVL_INFO, "otr: %s", msg); + + g_free(msg); } void display_otr_message(void *opdata, ConnContext *ctx, const char *fmt, ...) @@ -2074,5 +2085,3 @@ void otr_disconnect_all(irc_t *irc) } } } - -/* vim: set noet ts=4 sw=4: */ diff --git a/protocols/jabber/jabber_util.c b/protocols/jabber/jabber_util.c index b0bc033f..779d502b 100644 --- a/protocols/jabber/jabber_util.c +++ b/protocols/jabber/jabber_util.c @@ -565,6 +565,7 @@ struct jabber_buddy *jabber_buddy_by_ext_jid(struct im_connection *ic, char *jid jid = jabber_normalize_ext(jid_); if ((s = strchr(jid, '=')) == NULL) { + g_free(jid); return NULL; } diff --git a/protocols/msn/msn_util.c b/protocols/msn/msn_util.c index 8f929305..5164a8d2 100644 --- a/protocols/msn/msn_util.c +++ b/protocols/msn/msn_util.c @@ -173,6 +173,15 @@ struct msn_buddy_ask_data { char *realname; }; +static void msn_buddy_ask_free(void *data) +{ + struct msn_buddy_ask_data *bla = data; + + g_free(bla->handle); + g_free(bla->realname); + g_free(bla); +} + static void msn_buddy_ask_yes(void *data) { struct msn_buddy_ask_data *bla = data; @@ -181,9 +190,7 @@ static void msn_buddy_ask_yes(void *data) imcb_ask_add(bla->ic, bla->handle, NULL); - g_free(bla->handle); - g_free(bla->realname); - g_free(bla); + msn_buddy_ask_free(bla); } static void msn_buddy_ask_no(void *data) @@ -192,9 +199,7 @@ static void msn_buddy_ask_no(void *data) msn_buddy_list_add(bla->ic, MSN_BUDDY_BL, bla->handle, bla->realname, NULL); - g_free(bla->handle); - g_free(bla->realname); - g_free(bla); + msn_buddy_ask_free(bla); } void msn_buddy_ask(bee_user_t *bu) @@ -215,7 +220,8 @@ void msn_buddy_ask(bee_user_t *bu) g_snprintf(buf, sizeof(buf), "The user %s (%s) wants to add you to his/her buddy list.", bu->handle, bu->fullname); - imcb_ask(bu->ic, buf, bla, msn_buddy_ask_yes, msn_buddy_ask_no); + + imcb_ask_with_free(bu->ic, buf, bla, msn_buddy_ask_yes, msn_buddy_ask_no, msn_buddy_ask_free); } /* *NOT* thread-safe, but that's not a problem for now... */ diff --git a/protocols/nogaim.c b/protocols/nogaim.c index 2de24af8..a35b9838 100644 --- a/protocols/nogaim.c +++ b/protocols/nogaim.c @@ -497,14 +497,21 @@ struct imcb_ask_cb_data { char *handle; }; +static void imcb_ask_cb_free(void *data) +{ + struct imcb_ask_cb_data *cbd = data; + + g_free(cbd->handle); + g_free(cbd); +} + static void imcb_ask_auth_cb_no(void *data) { struct imcb_ask_cb_data *cbd = data; cbd->ic->acc->prpl->auth_deny(cbd->ic, cbd->handle); - g_free(cbd->handle); - g_free(cbd); + imcb_ask_cb_free(cbd); } static void imcb_ask_auth_cb_yes(void *data) @@ -513,8 +520,7 @@ static void imcb_ask_auth_cb_yes(void *data) cbd->ic->acc->prpl->auth_allow(cbd->ic, cbd->handle); - g_free(cbd->handle); - g_free(cbd); + imcb_ask_cb_free(cbd); } void imcb_ask_auth(struct im_connection *ic, const char *handle, const char *realname) @@ -534,14 +540,9 @@ void imcb_ask_auth(struct im_connection *ic, const char *handle, const char *rea data->ic = ic; data->handle = g_strdup(handle); query_add((irc_t *) ic->bee->ui_data, ic, s, - imcb_ask_auth_cb_yes, imcb_ask_auth_cb_no, g_free, data); -} - + imcb_ask_auth_cb_yes, imcb_ask_auth_cb_no, imcb_ask_cb_free, data); -static void imcb_ask_add_cb_no(void *data) -{ - g_free(((struct imcb_ask_cb_data*) data)->handle); - g_free(data); + g_free(s); } static void imcb_ask_add_cb_yes(void *data) @@ -550,12 +551,12 @@ static void imcb_ask_add_cb_yes(void *data) cbd->ic->acc->prpl->add_buddy(cbd->ic, cbd->handle, NULL); - imcb_ask_add_cb_no(data); + imcb_ask_cb_free(data); } void imcb_ask_add(struct im_connection *ic, const char *handle, const char *realname) { - struct imcb_ask_cb_data *data = g_new0(struct imcb_ask_cb_data, 1); + struct imcb_ask_cb_data *data; char *s; /* TODO: Make a setting for this! */ @@ -563,12 +564,16 @@ void imcb_ask_add(struct im_connection *ic, const char *handle, const char *real return; } + data = g_new0(struct imcb_ask_cb_data, 1); + s = g_strdup_printf("The user %s is not in your buddy list yet. Do you want to add him/her now?", handle); data->ic = ic; data->handle = g_strdup(handle); query_add((irc_t *) ic->bee->ui_data, ic, s, - imcb_ask_add_cb_yes, imcb_ask_add_cb_no, g_free, data); + imcb_ask_add_cb_yes, imcb_ask_cb_free, imcb_ask_cb_free, data); + + g_free(s); } struct bee_user *imcb_buddy_by_handle(struct im_connection *ic, const char *handle) diff --git a/storage_xml.c b/storage_xml.c index 38a73d87..4237e10e 100644 --- a/storage_xml.c +++ b/storage_xml.c @@ -127,6 +127,8 @@ static xt_status handle_account(struct xt_node *node, gpointer data) acc->flags |= ACC_FLAG_LOCAL; } } else { + g_free(pass_cr); + g_free(password); return XT_ABORT; } |