pidgin: eb16a1c0: Change the msim_msg_clone_element() func...
markdoliner at pidgin.im
markdoliner at pidgin.im
Sun Dec 14 23:13:54 EST 2008
-----------------------------------------------------------------
Revision: eb16a1c0c5f81e6320a264061588965751a02101
Ancestor: 10ea019ecb33303883a9a34e547d2c04b8267a3d
Author: markdoliner at pidgin.im
Date: 2008-12-15T04:08:31
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/eb16a1c0c5f81e6320a264061588965751a02101
Modified files:
libpurple/protocols/myspace/message.c
ChangeLog:
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.
-------------- next part --------------
============================================================
--- libpurple/protocols/myspace/message.c d5e139047a084dd3a7045ee46090a9350b78ef6d
+++ libpurple/protocols/myspace/message.c 35bcabdabf7a8091d3dfada5f0b193506f913fa5
@@ -23,6 +23,7 @@ static void msim_msg_free_element(gpoint
#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 @@ msim_msg_clone_element(gpointer data, gp
/* 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.
More information about the Commits
mailing list