Mercurial > pidgin
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); |