# HG changeset patch # User Paul Aurich # Date 1305079083 0 # Node ID 06ed9020b784dd73850425ba060d8ca27571c5ac # Parent 2b289a184dc244c53dc43f1b4d4ffe5a8e1ba92a jabber: Treat empty elements as "Buddies", not "" This ultimately led to duplicates in the list, because we had one entry in the GSList as "", and one as NULL, both of which are invalid group names, which resulted in the core blithely replacing them with "Buddies" and generating duplicates. I've tested with and without, and can reproduce the issues without the change. Log: (19:32:23) jabber: jabber_roster_parse(): Removing person@example.com from group 'Buddies' on the local list (19:32:23) GLib: g_string_append: assertion `val != NULL' failed (19:32:23) jabber: jabber_roster_parse(): Adding person@example.com to groups: , (19:32:23) g_log: purple_find_group: assertion `(name != NULL) && (*name != '\0')' failed (19:32:23) g_log: purple_group_new: assertion `name != NULL' failed (19:32:23) g_log: purple_blist_add_group: assertion `group != NULL' failed (19:32:23) g_log: purple_find_group: assertion `(name != NULL) && (*name != '\0')' failed (19:32:23) g_log: purple_group_new: assertion `*name != '\0'' failed (19:32:23) g_log: purple_blist_add_group: assertion `group != NULL' failed Since I had to look it up, purple_blist_add_buddy replaces (group == NULL) with "Buddies". diff -r 2b289a184dc2 -r 06ed9020b784 ChangeLog --- a/ChangeLog Tue May 10 04:45:01 2011 +0000 +++ b/ChangeLog Wed May 11 01:58:03 2011 +0000 @@ -92,6 +92,9 @@ (Keith Moyer) (#12451) * Correctly handle a buddy's unsetting his/her vCard-based avatar. (Matthew W.S. Bell) (#13370) + * Squash one more situation that resulted in duplicate entries in + the roster (this one where the server reports the buddy as being + in the same (empty) group. (Reported by Danny Mayer) Plugins: * The Voice/Video Settings plugin now includes the ability to test diff -r 2b289a184dc2 -r 06ed9020b784 libpurple/protocols/jabber/roster.c --- a/libpurple/protocols/jabber/roster.c Tue May 10 04:45:01 2011 +0000 +++ b/libpurple/protocols/jabber/roster.c Wed May 11 01:58:03 2011 +0000 @@ -243,7 +243,6 @@ remove_purple_buddies(js, jid); } else { GSList *groups = NULL; - gboolean seen_empty = FALSE; if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) if (!jabber_google_roster_incoming(js, item)) @@ -252,10 +251,9 @@ for(group = xmlnode_get_child(item, "group"); group; group = xmlnode_get_next_twin(group)) { char *group_name = xmlnode_get_data(group); - if (!group_name && !seen_empty) { - group_name = g_strdup(""); - seen_empty = TRUE; - } + if (group_name == NULL || *group_name == '\0') + /* Changing this string? Look in add_purple_buddy_to_groups */ + group_name = g_strdup(_("Buddies")); /* * See the note in add_purple_buddy_to_groups; the core handles