diff libpurple/server.c @ 27901:a4ae20007032

propagate from branch 'im.pidgin.pidgin' (head ac786ea6156dee361dab547dbc902b9ac3920a0a) to branch 'im.pidgin.pidgin.yaz' (head f87f1da4972a617cfee3f6f88c41609d4a8a18ad)
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Fri, 17 Oct 2008 01:38:57 +0000
parents e81f0d1966db
children b5e2be33a17a
line wrap: on
line diff
--- a/libpurple/server.c	Thu Oct 16 22:20:52 2008 +0000
+++ b/libpurple/server.c	Fri Oct 17 01:38:57 2008 +0000
@@ -241,6 +241,8 @@
 	GSList *buddies;
 	PurpleBuddy *b;
 	PurpleConversation *conv;
+	gsize dummy;
+	gchar *alias2 = NULL;
 
 	account = purple_connection_get_account(gc);
 	buddies = purple_find_buddies(account, who);
@@ -250,19 +252,23 @@
 		b = buddies->data;
 		buddies = g_slist_delete_link(buddies, buddies);
 
+		/* alias may be NULL */
 		if((b->server_alias == NULL && alias == NULL) ||
 		    (b->server_alias && alias && !strcmp(b->server_alias, alias)))
 		{
 			continue;
 		}
 
-		purple_blist_server_alias_buddy(b, alias);
+		if(alias)
+			alias2 = sanitize_utf(alias, strlen(alias), &dummy);
+
+		purple_blist_server_alias_buddy(b, alias2);
 
 		conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, b->name, account);
-		if(conv != NULL && alias != NULL && strcmp(alias, who))
+		if(conv != NULL && alias2 != NULL && strcmp(alias2, who))
 		{
 			char *tmp = g_strdup_printf(_("%s is now known as %s.\n"),
-										who, alias);
+										who, alias2);
 
 			purple_conversation_write(conv, NULL, tmp,
 					PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LINKIFY,
@@ -270,6 +276,8 @@
 
 			g_free(tmp);
 		}
+		g_free(alias2);
+		alias2 = NULL;
 	}
 }
 
@@ -279,6 +287,8 @@
 	PurpleAccount *account = NULL;
 	GSList *buddies = NULL;
 	PurpleBuddy *b = NULL;
+	gsize dummy;
+	gchar *alias2 = NULL;
 
 	account = purple_connection_get_account(gc);
 	buddies = purple_find_buddies(account, who);
@@ -291,11 +301,13 @@
 		if((!b->alias && !alias) || (b->alias && alias && !strcmp(b->alias, alias)))
 			continue;
 
-		purple_blist_alias_buddy(b, alias);
+		alias2 = sanitize_utf(alias, strlen(alias), &dummy);
+		purple_blist_alias_buddy(b, alias2);
+		g_free(alias2);
+		alias2 = NULL;
 	}
 }
 
-
 PurpleAttentionType *purple_get_attention_type_from_code(PurpleAccount *account, guint type_code)
 {
 	PurplePlugin *prpl;