# HG changeset patch # User Paul Aurich # Date 1256345952 0 # Node ID a335d1bab20e2fcd3f1dda14a8afb9475d876b49 # Parent eec2df4b9a2d9bda2b7607bd4100cbbab53d7a28 jabber: Reject invalid chat nicks in /nick command. Fixes #10532. diff -r eec2df4b9a2d -r a335d1bab20e libpurple/protocols/jabber/chat.c --- a/libpurple/protocols/jabber/chat.c Fri Oct 23 06:25:49 2009 +0000 +++ b/libpurple/protocols/jabber/chat.c Sat Oct 24 00:59:12 2009 +0000 @@ -692,11 +692,11 @@ } -void jabber_chat_change_nick(JabberChat *chat, const char *nick) +gboolean jabber_chat_change_nick(JabberChat *chat, const char *nick) { xmlnode *presence; char *full_jid; - PurplePresence *gpresence; + PurpleAccount *account; PurpleStatus *status; JabberBuddyState state; char *msg; @@ -706,11 +706,11 @@ purple_conv_chat_write(PURPLE_CONV_CHAT(chat->conv), "", _("Nick changing not supported in non-MUC chatrooms"), PURPLE_MESSAGE_SYSTEM, time(NULL)); - return; + return FALSE; } - gpresence = purple_account_get_presence(chat->js->gc->account); - status = purple_presence_get_active_status(gpresence); + account = purple_connection_get_account(chat->js->gc); + status = purple_account_get_active_status(account); purple_status_to_jabber(status, &state, &msg, &priority); @@ -722,6 +722,8 @@ jabber_send(chat->js, presence); xmlnode_free(presence); + + return TRUE; } void jabber_chat_part(JabberChat *chat, const char *msg) diff -r eec2df4b9a2d -r a335d1bab20e libpurple/protocols/jabber/chat.h --- a/libpurple/protocols/jabber/chat.h Fri Oct 23 06:25:49 2009 +0000 +++ b/libpurple/protocols/jabber/chat.h Sat Oct 24 00:59:12 2009 +0000 @@ -89,7 +89,7 @@ void jabber_chat_register(JabberChat *chat); void jabber_chat_change_topic(JabberChat *chat, const char *topic); void jabber_chat_set_topic(PurpleConnection *gc, int id, const char *topic); -void jabber_chat_change_nick(JabberChat *chat, const char *nick); +gboolean jabber_chat_change_nick(JabberChat *chat, const char *nick); void jabber_chat_part(JabberChat *chat, const char *msg); void jabber_chat_track_handle(JabberChat *chat, const char *handle, const char *jid, const char *affiliation, const char *role); diff -r eec2df4b9a2d -r a335d1bab20e libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c Fri Oct 23 06:25:49 2009 +0000 +++ b/libpurple/protocols/jabber/jabber.c Sat Oct 24 00:59:12 2009 +0000 @@ -2606,8 +2606,15 @@ if(!chat || !args || !args[0]) return PURPLE_CMD_RET_FAILED; - jabber_chat_change_nick(chat, args[0]); - return PURPLE_CMD_RET_OK; + if (!jabber_resourceprep_validate(args[0])) { + *error = g_strdup(_("Invalid nickname")); + return PURPLE_CMD_RET_FAILED; + } + + if (jabber_chat_change_nick(chat, args[0])) + return PURPLE_CMD_RET_OK; + else + return PURPLE_CMD_RET_FAILED; } static PurpleCmdRet jabber_cmd_chat_part(PurpleConversation *conv,