comparison libpurple/protocols/myspace/user.h @ 20982:aee8d876fed1

When getting info on a myspace user not on the buddy list, a temporary PurpleBuddy is needed so that the data can be associated properly. This fixes a bug wherein the profile link went to http://myspace.com/0 for all buddies not on the list. A check against that uid being 0 has also been added to avoid displaying junk data. Such temporary MsimUser objects (note that the temporariness of MsimUser objects is unchanged; a temporary PurpleBuddy has just been added to go with it) are destroyed before a delayed callback can be triggerred. This means that we can not request a buddy icon on that object, because we will end up with a pointer to freed data in the callback some time in the future. This fixes a crash when getting info on a non-buddy list buddy (which for reasons I can't pinpoint was most likely if the username contained capital letters). A reference counting system for MsimUser objects would fix this but is a significantly more complex solution.
author Evan Schoenberg <evan.s@dreskin.net>
date Thu, 18 Oct 2007 12:01:41 +0000
parents 51457cf3d27b
children
comparison
equal deleted inserted replaced
20981:145ee1570fc0 20982:aee8d876fed1
36 /* Note: uid is in &buddy->node (set_blist_node_int), since it never changes */ 36 /* Note: uid is in &buddy->node (set_blist_node_int), since it never changes */
37 gchar *username; 37 gchar *username;
38 gchar *band_name, *song_name; 38 gchar *band_name, *song_name;
39 gchar *image_url; 39 gchar *image_url;
40 guint last_image_updated; 40 guint last_image_updated;
41 gboolean temporary_user;
41 } MsimUser; 42 } MsimUser;
42 43
43 /* Callback function pointer type for when a user's information is received, 44 /* Callback function pointer type for when a user's information is received,
44 * initiated from a user lookup. */ 45 * initiated from a user lookup. */
45 typedef void (*MSIM_USER_LOOKUP_CB)(MsimSession *session, MsimMessage *userinfo, gpointer data); 46 typedef void (*MSIM_USER_LOOKUP_CB)(MsimSession *session, MsimMessage *userinfo, gpointer data);