# HG changeset patch # User Sadrul Habib Chowdhury # Date 1229547049 0 # Node ID c044eb54b7ac271c0f0bdc2ae1dff8ebe9fcc250 # Parent a8643ca8d2e0961a41e863e02d088c6d6df5ea4b Fix a leak in myspace prpl. In myspace.c:msim_process_reply, the clone of 'msg' sent to the callbacks were never freed. Also, do not unnecessarily dup a static string (which needs to be marked for translation after the string freeze). diff -r a8643ca8d2e0 -r c044eb54b7ac libpurple/protocols/myspace/message.c --- a/libpurple/protocols/myspace/message.c Wed Dec 17 18:36:31 2008 +0000 +++ b/libpurple/protocols/myspace/message.c Wed Dec 17 20:50:49 2008 +0000 @@ -401,7 +401,7 @@ * */ static GList * -msim_msg_get_node(MsimMessage *msg, const gchar *name) +msim_msg_get_node(const MsimMessage *msg, const gchar *name) { GList *node; @@ -410,7 +410,7 @@ } /* Linear search for the given name. O(n) but n is small. */ - for (node = msg; node != NULL; node = g_list_next(node)) { + for (node = (GList*)msg; node != NULL; node = g_list_next(node)) { MsimMessageElement *elem; elem = (MsimMessageElement *)node->data; @@ -1066,7 +1066,7 @@ * another msim_msg_get_* that converts the data to what type you want. */ MsimMessageElement * -msim_msg_get(MsimMessage *msg, const gchar *name) +msim_msg_get(const MsimMessage *msg, const gchar *name) { GList *node; @@ -1115,7 +1115,7 @@ * This function unescapes the string for you, if needed. */ gchar * -msim_msg_get_string(MsimMessage *msg, const gchar *name) +msim_msg_get_string(const MsimMessage *msg, const gchar *name) { MsimMessageElement *elem; @@ -1185,7 +1185,7 @@ * Return an element as a new list. Caller frees with msim_msg_list_free(). */ GList * -msim_msg_get_list(MsimMessage *msg, const gchar *name) +msim_msg_get_list(const MsimMessage *msg, const gchar *name) { MsimMessageElement *elem; @@ -1279,7 +1279,7 @@ * Return an element as a new dictionary. Caller frees with msim_msg_free(). */ MsimMessage * -msim_msg_get_dictionary(MsimMessage *msg, const gchar *name) +msim_msg_get_dictionary(const MsimMessage *msg, const gchar *name) { MsimMessageElement *elem; @@ -1321,7 +1321,7 @@ * be converted handled correctly, for example. */ guint -msim_msg_get_integer(MsimMessage *msg, const gchar *name) +msim_msg_get_integer(const MsimMessage *msg, const gchar *name) { MsimMessageElement *elem; @@ -1398,7 +1398,7 @@ * @return TRUE if successful, FALSE if not. */ gboolean -msim_msg_get_binary(MsimMessage *msg, const gchar *name, +msim_msg_get_binary(const MsimMessage *msg, const gchar *name, gchar **binary_data, gsize *binary_length) { MsimMessageElement *elem; diff -r a8643ca8d2e0 -r c044eb54b7ac libpurple/protocols/myspace/message.h --- a/libpurple/protocols/myspace/message.h Wed Dec 17 18:36:31 2008 +0000 +++ b/libpurple/protocols/myspace/message.h Wed Dec 17 20:50:49 2008 +0000 @@ -93,14 +93,14 @@ MsimMessage *msim_parse(const gchar *raw); -MsimMessageElement *msim_msg_get(MsimMessage *msg, const gchar *name); +MsimMessageElement *msim_msg_get(const MsimMessage *msg, const gchar *name); /* Retrieve data by name */ -gchar *msim_msg_get_string(MsimMessage *msg, const gchar *name); -GList *msim_msg_get_list(MsimMessage *msg, const gchar *name); -MsimMessage *msim_msg_get_dictionary(MsimMessage *msg, const gchar *name); -guint msim_msg_get_integer(MsimMessage *msg, const gchar *name); -gboolean msim_msg_get_binary(MsimMessage *msg, const gchar *name, gchar **binary_data, gsize *binary_length); +gchar *msim_msg_get_string(const MsimMessage *msg, const gchar *name); +GList *msim_msg_get_list(const MsimMessage *msg, const gchar *name); +MsimMessage *msim_msg_get_dictionary(const MsimMessage *msg, const gchar *name); +guint msim_msg_get_integer(const MsimMessage *msg, const gchar *name); +gboolean msim_msg_get_binary(const MsimMessage *msg, const gchar *name, gchar **binary_data, gsize *binary_length); /* Retrieve data by element (MsimMessageElement *), returned from msim_msg_get() */ gchar *msim_msg_get_string_from_element(MsimMessageElement *elem); diff -r a8643ca8d2e0 -r c044eb54b7ac libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Wed Dec 17 18:36:31 2008 +0000 +++ b/libpurple/protocols/myspace/myspace.c Wed Dec 17 20:50:49 2008 +0000 @@ -112,7 +112,7 @@ * _uid_before: string, name of field before field to insert, or NULL for end */ static void -msim_postprocess_outgoing_cb(MsimSession *session, MsimMessage *userinfo, +msim_postprocess_outgoing_cb(MsimSession *session, const MsimMessage *userinfo, gpointer data) { gchar *uid_field_name, *uid_before, *username; @@ -829,7 +829,7 @@ * Handle mail reply checks. */ static void -msim_check_inbox_cb(MsimSession *session, MsimMessage *reply, gpointer data) +msim_check_inbox_cb(MsimSession *session, const MsimMessage *reply, gpointer data) { MsimMessage *body; guint old_inbox_status; @@ -958,7 +958,7 @@ * @param data An MsimMessage * of the contact information. Will be freed. */ static void -msim_add_contact_from_server_cb(MsimSession *session, MsimMessage *user_lookup_info, gpointer data) +msim_add_contact_from_server_cb(MsimSession *session, const MsimMessage *user_lookup_info, gpointer data) { MsimMessage *contact_info, *user_lookup_info_body; PurpleGroup *group; @@ -1094,7 +1094,7 @@ * Called when contact list is received from server. */ static void -msim_got_contact_list(MsimSession *session, MsimMessage *reply, gpointer user_data) +msim_got_contact_list(MsimSession *session, const MsimMessage *reply, gpointer user_data) { MsimMessage *body, *body_node; gchar *msg; @@ -1767,7 +1767,7 @@ if (cb) { purple_debug_info("msim", "msim_process_reply: calling callback now\n"); /* Clone message, so that the callback 'cb' can use it (needs to free it also). */ - cb(session, msim_msg_clone(msg), data); + cb(session, msg, data); g_hash_table_remove(session->user_lookup_cb, GUINT_TO_POINTER(rid)); g_hash_table_remove(session->user_lookup_cb_data, GUINT_TO_POINTER(rid)); } else { @@ -1898,7 +1898,7 @@ * @param data MsimMessage *, the message to attach information to. */ static void -msim_incoming_resolved(MsimSession *session, MsimMessage *userinfo, +msim_incoming_resolved(MsimSession *session, const MsimMessage *userinfo, gpointer data) { gchar *username; @@ -2340,7 +2340,7 @@ * Callback for msim_get_info(), for when user info is received. */ static void -msim_get_info_cb(MsimSession *session, MsimMessage *user_info_msg, +msim_get_info_cb(MsimSession *session, const MsimMessage *user_info_msg, gpointer data) { MsimMessage *msg; @@ -3087,7 +3087,7 @@ * Called when friends have been imported to buddy list on server. */ static void -msim_import_friends_cb(MsimSession *session, MsimMessage *reply, gpointer user_data) +msim_import_friends_cb(MsimSession *session, const MsimMessage *reply, gpointer user_data) { MsimMessage *body; gchar *completed; diff -r a8643ca8d2e0 -r c044eb54b7ac libpurple/protocols/myspace/user.c --- a/libpurple/protocols/myspace/user.c Wed Dec 17 18:36:31 2008 +0000 +++ b/libpurple/protocols/myspace/user.c Wed Dec 17 20:50:49 2008 +0000 @@ -388,7 +388,7 @@ * is a no-op (and returns FALSE). */ gboolean -msim_store_user_info(MsimSession *session, MsimMessage *msg, MsimUser *user) +msim_store_user_info(MsimSession *session, const MsimMessage *msg, MsimUser *user) { gchar *username; MsimMessage *body, *body_node; @@ -592,9 +592,10 @@ /** * Called after username is set. */ -static void msim_username_is_set_cb(MsimSession *session, MsimMessage *userinfo, gpointer data) +static void msim_username_is_set_cb(MsimSession *session, const MsimMessage *userinfo, gpointer data) { - gchar *username, *errmsg; + gchar *username; + const gchar *errmsg; MsimMessage *body; guint rid; @@ -610,7 +611,8 @@ uid = msim_msg_get_integer(userinfo, "uid"); lid = msim_msg_get_integer(userinfo, "lid"); body = msim_msg_get_dictionary(userinfo, "body"); - errmsg = g_strdup("An error occurred while trying to set the username.\n" + /* XXX: Mark for translation */ + errmsg = ("An error occurred while trying to set the username.\n" "Please try again, or visit http://editprofile.myspace.com/index.cfm?" "fuseaction=profile.username to set your username."); @@ -667,7 +669,6 @@ purple_debug_info("msim","username_is_set Error: Invalid cmd/dsn/lid combination"); purple_connection_error_reason(session->gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR, errmsg); } - g_free(errmsg); } /** @@ -751,7 +752,7 @@ * Now we have some real data to tell us the state of their requested username * \persistr\\cmd\257\dsn\5\uid\204084363\lid\7\rid\367\body\UserName=TheAlbinoRhino1\final\ */ -static void msim_username_is_available_cb(MsimSession *session, MsimMessage *userinfo, gpointer data) +static void msim_username_is_available_cb(MsimSession *session, const MsimMessage *userinfo, gpointer data) { MsimMessage *msg; gchar *username; diff -r a8643ca8d2e0 -r c044eb54b7ac libpurple/protocols/myspace/user.h --- a/libpurple/protocols/myspace/user.h Wed Dec 17 18:36:31 2008 +0000 +++ b/libpurple/protocols/myspace/user.h Wed Dec 17 20:50:49 2008 +0000 @@ -44,12 +44,12 @@ /* Callback function pointer type for when a user's information is received, * initiated from a user lookup. */ -typedef void (*MSIM_USER_LOOKUP_CB)(MsimSession *session, MsimMessage *userinfo, gpointer data); +typedef void (*MSIM_USER_LOOKUP_CB)(MsimSession *session, const MsimMessage *userinfo, gpointer data); MsimUser *msim_get_user_from_buddy(PurpleBuddy *buddy); MsimUser *msim_find_user(MsimSession *session, const gchar *username); void msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, MsimUser *user, gboolean full); -gboolean msim_store_user_info(MsimSession *session, MsimMessage *msg, MsimUser *user); +gboolean msim_store_user_info(MsimSession *session, const MsimMessage *msg, MsimUser *user); gboolean msim_is_userid(const gchar *user); void msim_lookup_user(MsimSession *session, const gchar *user, MSIM_USER_LOOKUP_CB cb, gpointer data); void msim_set_username_cb(PurpleConnection *gc);