Mercurial > pidgin
diff libpurple/protocols/msn/contact.c @ 20501:f6dff814d95f
cleans up ownership of soap callback data, this soap stuff is perfect
weight-loss pill, because it makes you want to throw up
author | Ka-Hing Cheung <khc@hxbc.us> |
---|---|
date | Sun, 09 Sep 2007 01:42:46 +0000 |
parents | 7f5564ebde7f |
children | 90fd0826c6ce 2c8c6d77f12c |
line wrap: on
line diff
--- a/libpurple/protocols/msn/contact.c Sun Sep 09 00:50:14 2007 +0000 +++ b/libpurple/protocols/msn/contact.c Sun Sep 09 01:42:46 2007 +0000 @@ -77,7 +77,8 @@ void msn_callback_state_free(MsnCallbackState *state) { - g_return_if_fail(state != NULL); + if (state == NULL) + return; if (state->who != NULL) g_free(state->who); @@ -248,6 +249,9 @@ MsnSoapConn *soapconn = data; MsnContact *contact; + if (soapconn->body == NULL) + return; + contact = soapconn->parent; g_return_if_fail(contact != NULL); @@ -533,6 +537,9 @@ const char *dynamicItemLastChange; gchar *partner_scenario; + if (soapconn->body == NULL) + return; + purple_debug_misc("MSNCL","Got the contact list!\n"); contact = soapconn->parent; @@ -902,6 +909,9 @@ MsnContact *contact; MsnSession *session; + if (soapconn->body == NULL) + return; + contact = soapconn->parent; g_return_if_fail(contact != NULL); session = soapconn->session; @@ -990,11 +1000,16 @@ g_return_if_fail(soapconn->data_cb != NULL); g_return_if_fail(soapconn->session != NULL); g_return_if_fail(soapconn->session->userlist != NULL); + + state = (MsnCallbackState *) soapconn->data_cb; + + if (soapconn->body == NULL) { + msn_callback_state_free(state); + return; + } userlist = soapconn->session->userlist; - state = (MsnCallbackState *) soapconn->data_cb; - purple_debug_info("MSNCL","Contact added successfully\n"); // the code this block is replacing didn't send ADL for yahoo contacts, @@ -1078,14 +1093,19 @@ MsnCallbackState *state; MsnUserList *userlist; - g_return_if_fail(soapconn->data_cb != NULL); - g_return_if_fail(soapconn->session != NULL); - g_return_if_fail(soapconn->session->userlist != NULL); + g_return_if_fail(soapconn->data_cb != NULL); + g_return_if_fail(soapconn->session != NULL); + g_return_if_fail(soapconn->session->userlist != NULL); - userlist = soapconn->session->userlist; + userlist = soapconn->session->userlist; state = (MsnCallbackState *) soapconn->data_cb; + if (soapconn->body == NULL) { + msn_callback_state_free(state); + return; + } + if (msn_userlist_add_buddy_to_group(userlist, state->who, state->new_group_name) == TRUE) { purple_debug_info("MSNCL", "Contact %s added to group %s successfully!\n", state->who, state->new_group_name); } else { @@ -1204,6 +1224,9 @@ { MsnSoapConn * soapconn = data; + if (soapconn->body == NULL) + return; + // we should probably delete it from the userlist aswell purple_debug_info("MSNCL","Delete contact successful\n"); msn_soap_free_read_buf(soapconn); @@ -1253,6 +1276,11 @@ { MsnSoapConn * soapconn = data; MsnCallbackState *state = (MsnCallbackState *) soapconn->data_cb; + + if (soapconn->body == NULL) { + msn_callback_state_free(state); + return; + } if (msn_userlist_rem_buddy_from_group(soapconn->session->userlist, state->who, state->old_group_name)) { purple_debug_info("MSN CL", "Contact %s deleted successfully from group %s\n", state->who, state->old_group_name); @@ -1341,6 +1369,11 @@ static void msn_update_contact_read_cb(gpointer data, gint source, PurpleInputCondition cond) { + MsnSoapConn *soapconn = data; + + if (soapconn->body == NULL) + return; + purple_debug_info("MSN CL","Contact updated successfully\n"); } @@ -1394,6 +1427,11 @@ state = (MsnCallbackState *) soapconn->data_cb; + if (soapconn->body == NULL) { + msn_callback_state_free(state); + return; + } + purple_debug_info("MSN CL", "Contact %s deleted successfully from %s list on server!\n", state->who, MsnMemberRole[state->list_id]); if (state->list_id == MSN_LIST_PL) { @@ -1493,6 +1531,11 @@ state = (MsnCallbackState *) soapconn->data_cb; + if (soapconn->body == NULL) { + msn_callback_state_free(state); + return; + } + purple_debug_info("MSN CL", "Contact %s added successfully to %s list on server!\n", state->who, MsnMemberRole[state->list_id]); if (state->list_id == MSN_LIST_RL && (state->action & MSN_DENIED_BUDDY) ) { @@ -1621,9 +1664,15 @@ g_return_if_fail(soapconn->session != NULL); g_return_if_fail(soapconn->session->userlist != NULL); g_return_if_fail(soapconn->session->contact != NULL); + + state = (MsnCallbackState *) soapconn->data_cb; - if (soapconn->data_cb != NULL) { - state = (MsnCallbackState *) soapconn->data_cb; + if (soapconn->body == NULL) { + msn_callback_state_free(state); + return; + } + + if (state) { userlist = soapconn->session->userlist; if (state->action & MSN_RENAME_GROUP) {