From d6e2aa8220ae87c58c10ff54b2de80e32b51ac08 Mon Sep 17 00:00:00 2001 From: dequis Date: Mon, 9 Nov 2015 09:21:46 -0300 Subject: Nuke imcb_clean_handle(), which was merging handles accidentally Well, just deprecated and turned into a no-op. It was only used for jabber anonymous MUCs, but this is something the IRC layer must take care of. It stripped all whitespace, control and non-ascii characters, breaking utf8 nicks support and accidentally merging contacts whose cleaned-up handles were the same string. For example, you could have two users with nicks ' ' and ' ' (one and two spaces respectively) and imcb_clean_handle() would just merge them into a single handle, '', which makes them look like a single irc user. The same thing happens with nicks that are entirely made of utf8. Thanks to schoppenhauer from #bitlbee for reporting this and preparing a test case channel! --- protocols/jabber/conference.c | 3 --- protocols/nogaim.c | 28 ++-------------------------- protocols/nogaim.h | 3 ++- 3 files changed, 4 insertions(+), 30 deletions(-) diff --git a/protocols/jabber/conference.c b/protocols/jabber/conference.c index 9c32bb01..ebb97a72 100644 --- a/protocols/jabber/conference.c +++ b/protocols/jabber/conference.c @@ -301,9 +301,6 @@ void jabber_chat_pkt_presence(struct im_connection *ic, struct jabber_buddy *bud bud->ext_jid[i] = '_'; } } - - /* Some program-specific restrictions. */ - imcb_clean_handle(ic, bud->ext_jid); } bud->flags |= JBFLAG_IS_ANONYMOUS; } diff --git a/protocols/nogaim.c b/protocols/nogaim.c index a35b9838..9462a5d9 100644 --- a/protocols/nogaim.c +++ b/protocols/nogaim.c @@ -734,32 +734,8 @@ void imc_rem_block(struct im_connection *ic, char *handle) ic->acc->prpl->rem_deny(ic, handle); } +/* Deprecated: using this function resulted in merging several handles accidentally + * Also the irc layer handles this decently nowadays */ void imcb_clean_handle(struct im_connection *ic, char *handle) { - /* Accepts a handle and does whatever is necessary to make it - BitlBee-friendly. Currently this means removing everything - outside 33-127 (ASCII printable excl spaces), @ (only one - is allowed) and ! and : */ - char out[strlen(handle) + 1]; - int s, d; - - s = d = 0; - while (handle[s]) { - if (handle[s] > ' ' && handle[s] != '!' && handle[s] != ':' && - (handle[s] & 0x80) == 0) { - if (handle[s] == '@') { - /* See if we got an @ already? */ - out[d] = 0; - if (strchr(out, '@')) { - continue; - } - } - - out[d++] = handle[s]; - } - s++; - } - out[d] = handle[s]; - - strcpy(handle, out); } diff --git a/protocols/nogaim.h b/protocols/nogaim.h index 548b22f9..668216b3 100644 --- a/protocols/nogaim.h +++ b/protocols/nogaim.h @@ -327,7 +327,8 @@ G_MODULE_EXPORT void imcb_buddy_action_response(bee_user_t *bu, const char *acti G_MODULE_EXPORT void imcb_buddy_typing(struct im_connection *ic, const char *handle, guint32 flags); G_MODULE_EXPORT struct bee_user *imcb_buddy_by_handle(struct im_connection *ic, const char *handle); -G_MODULE_EXPORT void imcb_clean_handle(struct im_connection *ic, char *handle); + +G_GNUC_DEPRECATED G_MODULE_EXPORT void imcb_clean_handle(struct im_connection *ic, char *handle); /* Actions, or whatever. */ int imc_away_send_update(struct im_connection *ic); -- cgit v1.2.3