diff options
author | Luke Schierer <lschiere@pidgin.im> | 2007-10-21 05:05:38 +0000 |
---|---|---|
committer | Luke Schierer <lschiere@pidgin.im> | 2007-10-21 05:05:38 +0000 |
commit | af1be10f80c9faaaff4ae16e44fdd79a578fc3fa (patch) | |
tree | 394dc139de6b92ff4f944d78e620891e91743dad | |
parent | e03430045ddb83b22916491d3ef1b1e07164d860 (diff) | |
download | pidgin-af1be10f80c9faaaff4ae16e44fdd79a578fc3fa.tar.gz |
applied changes from 8e81ccec879f9cfbd8fc282b703803c98e150ff7
through 3bee1aee40b5389caacd65f686618708d5bc65c8
-rw-r--r-- | libpurple/protocols/myspace/myspace.c | 16 | ||||
-rw-r--r-- | libpurple/protocols/myspace/user.c | 18 | ||||
-rw-r--r-- | libpurple/protocols/myspace/user.h | 1 |
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, |