diff libpurple/server.c @ 27835:f9fd7ddf6996

propagate from branch 'im.pidgin.pidgin' (head 245104c3da64bf99627578bd68d6cda42ee16b43) to branch 'im.pidgin.pidgin.yaz' (head 315daf3ce50ca525a9cccd85c5ef0b96dec0f162)
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Thu, 08 May 2008 00:27:54 +0000
parents 2f05586afa12
children acef4202e147
line wrap: on
line diff
--- a/libpurple/server.c	Thu May 08 00:22:08 2008 +0000
+++ b/libpurple/server.c	Thu May 08 00:27:54 2008 +0000
@@ -242,6 +242,8 @@
 	GSList *buddies;
 	PurpleBuddy *b;
 	PurpleConversation *conv;
+	gsize dummy;
+	gchar *alias2 = NULL;
 
 	account = purple_connection_get_account(gc);
 	buddies = purple_find_buddies(account, who);
@@ -251,19 +253,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,
@@ -271,6 +277,8 @@
 
 			g_free(tmp);
 		}
+		g_free(alias2);
+		alias2 = NULL;
 	}
 }
 
@@ -280,6 +288,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);
@@ -292,11 +302,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;