Fix a race in roster_add_user()
authorMikael Berthe <mikael@lilotux.net>
Mon, 12 Nov 2007 22:43:08 +0100
changeset 1366 01e558748379
parent 1365 c7e709719c43
child 1367 cd0d63024923
Fix a race in roster_add_user() Thanks to franky for the detailed bug report.
mcabber/src/roster.c
--- a/mcabber/src/roster.c	Mon Nov 12 19:27:55 2007 +0100
+++ b/mcabber/src/roster.c	Mon Nov 12 22:43:08 2007 +0100
@@ -365,14 +365,18 @@
     // That's an update
     roster_usr = slist->data;
     roster_usr->subscription = esub;
+    if (onserver >= 0)
+      buddy_setonserverflag(slist->data, onserver);
     if (name)
       buddy_setname(slist->data, (char*)name);
     // Let's check if the group name has changed
     oldgroupname = ((roster*)((GSList*)roster_usr->list)->data)->name;
-    if (group && strcmp(oldgroupname, group))
+    if (group && strcmp(oldgroupname, group)) {
       buddy_setgroup(slist->data, (char*)group);
-    if (onserver != -1)
-      buddy_setonserverflag(slist->data, onserver);
+      // Note: buddy_setgroup() updates the user lists so we cannot
+      // use slist anymore.
+      return roster_find(jid, jidsearch, 0);
+    }
     return slist;
   }
   // #2 add group if necessary
@@ -892,6 +896,8 @@
 //  buddy_setgroup()
 // Change the group of current buddy
 //
+// Note: buddy_setgroup() updates the user lists.
+//
 void buddy_setgroup(gpointer rosterdata, char *newgroupname)
 {
   roster *roster_usr = rosterdata;