summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Schierer <lschiere@pidgin.im>2007-10-21 05:05:38 +0000
committerLuke Schierer <lschiere@pidgin.im>2007-10-21 05:05:38 +0000
commitaf1be10f80c9faaaff4ae16e44fdd79a578fc3fa (patch)
tree394dc139de6b92ff4f944d78e620891e91743dad
parente03430045ddb83b22916491d3ef1b1e07164d860 (diff)
downloadpidgin-af1be10f80c9faaaff4ae16e44fdd79a578fc3fa.tar.gz
applied changes from 8e81ccec879f9cfbd8fc282b703803c98e150ff7
through 3bee1aee40b5389caacd65f686618708d5bc65c8
-rw-r--r--libpurple/protocols/myspace/myspace.c16
-rw-r--r--libpurple/protocols/myspace/user.c18
-rw-r--r--libpurple/protocols/myspace/user.h1
3 files changed, 25 insertions, 10 deletions
diff --git a/libpurple/protocols/myspace/myspace.c b/libpurple/protocols/myspace/myspace.c
index 519eb98382..d018151912 100644
--- a/libpurple/protocols/myspace/myspace.c
+++ b/libpurple/protocols/myspace/myspace.c
@@ -933,7 +933,6 @@ msim_get_info_cb(MsimSession *session, MsimMessage *user_info_msg,
gchar *username;
PurpleNotifyUserInfo *user_info;
MsimUser *user;
- gboolean temporary_user;
g_return_if_fail(MSIM_SESSION_VALID(session));
@@ -955,10 +954,14 @@ msim_get_info_cb(MsimSession *session, MsimMessage *user_info_msg,
if (!user) {
/* User isn't on blist, create a temporary user to store info. */
- temporary_user = TRUE;
+ PurpleBuddy *buddy;
+
user = g_new0(MsimUser, 1);
- } else {
- temporary_user = FALSE;
+ user->temporary_user = TRUE;
+
+ buddy = purple_buddy_new(session->account, username, NULL);
+ user->buddy = buddy;
+ buddy->proto_data = (gpointer)user;
}
/* Update user structure with new information */
@@ -974,7 +977,8 @@ msim_get_info_cb(MsimSession *session, MsimMessage *user_info_msg,
purple_notify_user_info_destroy(user_info);
- if (temporary_user) {
+ if (user->temporary_user) {
+ purple_blist_remove_buddy(user->buddy);
g_free(user->client_info);
g_free(user->gender);
g_free(user->location);
@@ -1450,7 +1454,7 @@ msim_check_newer_version_cb(PurpleUtilFetchUrlData *url_data,
purple_debug_info("msim", "data=%s\n", data->str
? data->str : "(NULL)");
- /* url_text is variable=data\n... */
+ /* url_text is variable=data\n...†*/
/* Check FILEVER, 1.0.716.0. 716 is build, MSIM_CLIENT_VERSION */
/* New (english) version can be downloaded from SETUPURL+SETUPFILE */
diff --git a/libpurple/protocols/myspace/user.c b/libpurple/protocols/myspace/user.c
index e3b2c4c6de..ce74d60ce5 100644
--- a/libpurple/protocols/myspace/user.c
+++ b/libpurple/protocols/myspace/user.c
@@ -99,10 +99,12 @@ msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, Msi
if (full) {
/* TODO: link to username, if available */
- char *profile = g_strdup_printf("<a href=\"http://myspace.com/%d\">http://myspace.com/%d</a>",
- uid, uid);
- purple_notify_user_info_add_pair(user_info, _("Profile"), profile);
- g_free(profile);
+ if (uid) {
+ char *profile = g_strdup_printf("<a href=\"http://myspace.com/%d\">http://myspace.com/%d</a>",
+ uid, uid);
+ purple_notify_user_info_add_pair(user_info, _("Profile"), profile);
+ g_free(profile);
+ }
}
@@ -189,6 +191,14 @@ msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user
/* Ignore because PurpleBuddy knows this already */
;
} else if (g_str_equal(key_str, "ImageURL") || g_str_equal(key_str, "AvatarURL")) {
+ if (user->temporary_user) {
+ /* This user will be destroyed soon; don't try to look up its image or avatar,
+ * since that won't return immediately and we will end up accessing freed data.
+ */
+ g_free(value_str);
+ return;
+ }
+
const gchar *previous_url;
user->image_url = g_strdup(value_str);
diff --git a/libpurple/protocols/myspace/user.h b/libpurple/protocols/myspace/user.h
index f1756e923e..6c01d8fd38 100644
--- a/libpurple/protocols/myspace/user.h
+++ b/libpurple/protocols/myspace/user.h
@@ -38,6 +38,7 @@ typedef struct _MsimUser
gchar *band_name, *song_name;
gchar *image_url;
guint last_image_updated;
+ gboolean temporary_user;
} MsimUser;
/* Callback function pointer type for when a user's information is received,