Mercurial > pidgin
changeset 24745:0e8d91cdd63a
Change the msim_msg_clone_element() function to respect the "dynamic_name"
flag when cloning elements. This fixes the bug where buddies didn't
appear in their correct groups the first time you sign in. The problem
is that msim_add_contact_from_server() doesn't have the username, so
it calls msim_lookup_user() and clones the contact_info. The problem is
that the cloned version of the contact_info points to dynamic names which
are freed before we get the response from the user lookup. So
msim_add_contact_from_server_cb() is called and based the contact_info,
but the names in the contact_info point to freed memory, so we couldn't
lookup the uid or the group.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 15 Dec 2008 04:08:31 +0000 |
parents | 939d173b68b3 |
children | 6efcf61cf12b |
files | libpurple/protocols/myspace/message.c |
diffstat | 1 files changed, 5 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/protocols/myspace/message.c Mon Dec 15 03:01:38 2008 +0000 +++ b/libpurple/protocols/myspace/message.c Mon Dec 15 04:08:31 2008 +0000 @@ -23,6 +23,7 @@ #include "message.h" static void msim_msg_free_element(gpointer data, gpointer user_data); +static MsimMessage *msim_msg_append_dynamic_name(MsimMessage *msg, gchar *name, MsimMessageType type, gpointer data); static void msim_msg_debug_string_element(gpointer data, gpointer user_data); static gchar *msim_msg_pack_using(MsimMessage *msg, GFunc gf, const gchar *sep, const gchar *begin, const gchar *end); static GList *msim_msg_get_node(MsimMessage *msg, const gchar *name); @@ -357,7 +358,10 @@ /* Append cloned data. Note that the 'name' field is a static string, so it * never needs to be copied nor freed. */ - *new = msim_msg_append(*new, elem->name, elem->type, new_data); + if (elem->dynamic_name) + *new = msim_msg_append_dynamic_name(*new, g_strdup(elem->name), elem->type, new_data); + else + *new = msim_msg_append(*new, elem->name, elem->type, new_data); } /** Clone an existing MsimMessage.