--- a/libpurple/protocols/jabber/google/google_roster.c Mon Feb 18 18:47:11 2013 -0800 +++ b/libpurple/protocols/jabber/google/google_roster.c Mon Feb 18 18:59:08 2013 -0800 @@ -62,7 +62,7 @@ return FALSE; } - jid_norm = g_strdup(jabber_normalize(account, jid)); + jid_norm = g_strdup(jabber_normalize(account, jid)); on_block_list = NULL != g_slist_find_custom(account->deny, jid_norm, (GCompareFunc)strcmp); @@ -70,12 +70,14 @@ if (grt && (*grt == 'H' || *grt == 'h')) { /* Hidden; don't show this buddy. */ GSList *buddies = purple_find_buddies(account, jid_norm); - if (buddies) + if (buddies) { purple_debug_info("jabber", "Removing %s from local buddy list\n", jid_norm); - for ( ; buddies; buddies = g_slist_delete_link(buddies, buddies)) { - purple_blist_remove_buddy(buddies->data); + do { + purple_blist_remove_buddy(buddies->data); + buddies = g_slist_delete_link(buddies, buddies); + } while (buddies); } g_free(jid_norm); @@ -113,14 +115,12 @@ if(!buddies) return; - b = buddies->data; - iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:roster"); query = xmlnode_get_child(iq->node, "query"); item = xmlnode_new_child(query, "item"); - while(buddies) { + do { PurpleGroup *g; b = buddies->data; @@ -129,8 +129,8 @@ group = xmlnode_new_child(item, "group"); xmlnode_insert_data(group, purple_group_get_name(g), -1); - buddies = buddies->next; - } + buddies = g_slist_delete_link(buddies, buddies); + } while (buddies); balias = purple_buddy_get_local_buddy_alias(b); xmlnode_set_attrib(item, "jid", who); @@ -173,14 +173,12 @@ if(!buddies) return; - b = buddies->data; - iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:roster"); query = xmlnode_get_child(iq->node, "query"); item = xmlnode_new_child(query, "item"); - while(buddies) { + do { PurpleGroup *g; b = buddies->data; @@ -189,8 +187,8 @@ group = xmlnode_new_child(item, "group"); xmlnode_insert_data(group, purple_group_get_name(g), -1); - buddies = buddies->next; - } + buddies = g_slist_delete_link(buddies, buddies); + } while (buddies); balias = purple_buddy_get_local_buddy_alias(b); xmlnode_set_attrib(item, "jid", who);