diff options
author | dequis <dx@dxzone.com.ar> | 2015-03-21 05:26:20 -0300 |
---|---|---|
committer | dequis <dx@dxzone.com.ar> | 2015-03-22 10:35:08 -0300 |
commit | 098a75b2b2f6a23b5740f6a2032d8a4c8d0d36b2 (patch) | |
tree | ef90f8b10c0b41fd1a90f2f13c1d8f6bf62fa872 /protocols/msn/msn_util.c | |
parent | 2dd23da38926e777c1dba707350b2afcf9421b25 (diff) |
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
Diffstat (limited to 'protocols/msn/msn_util.c')
-rw-r--r-- | protocols/msn/msn_util.c | 20 |
1 files changed, 13 insertions, 7 deletions
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... */ |