Skip to content

Commit

Permalink
Filter RTL unicode characters out
Browse files Browse the repository at this point in the history
Gajim sends \u200E and \u200F for RTL.
It is planned that Gajim stops doing this and uses some GTK feature to
get the same result.

However users expressed the whish that we filter out such characters in
incoming messages before displaying them to make Profanity more robust.

I'm still not sure whether I like the solution because it means a lot of
allocating/deallocating upon every new message.

Fix #1220
  • Loading branch information
jubalh committed Nov 13, 2019
1 parent 750355a commit 87f9bac
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/event/server_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@

#include "ui/ui.h"

static void _clean_incoming_message(ProfMessage *message);

void
sv_ev_login_account_success(char *account_name, gboolean secured)
{
Expand Down Expand Up @@ -326,6 +328,7 @@ sv_ev_room_message(ProfMessage *message)

GList *triggers = prefs_message_get_triggers(message->plain);

_clean_incoming_message(message);
mucwin_incoming_msg(mucwin, message, mentions, triggers);

g_slist_free(mentions);
Expand Down Expand Up @@ -397,6 +400,8 @@ sv_ev_incoming_private_message(ProfMessage *message)
ProfWin *window = wins_new_private(message->jid->fulljid);
privatewin = (ProfPrivateWin*)window;
}

_clean_incoming_message(message);
privwin_incoming_msg(privatewin, message);
chat_log_msg_in(message);

Expand All @@ -418,6 +423,8 @@ sv_ev_delayed_private_message(ProfMessage *message)
ProfWin *window = wins_new_private(message->jid->fulljid);
privatewin = (ProfPrivateWin*)window;
}

_clean_incoming_message(message);
privwin_incoming_msg(privatewin, message);
chat_log_msg_in(message);

Expand Down Expand Up @@ -529,6 +536,7 @@ _sv_ev_incoming_pgp(ProfChatWin *chatwin, gboolean new_win, ProfMessage *message
message->plain = p_gpg_decrypt(message->encrypted);
if (message->plain) {
message->enc = PROF_MSG_ENC_PGP;
_clean_incoming_message(message);
chatwin_incoming_msg(chatwin, message, new_win);
if (logit) {
chat_log_pgp_msg_in(message);
Expand All @@ -543,6 +551,7 @@ _sv_ev_incoming_pgp(ProfChatWin *chatwin, gboolean new_win, ProfMessage *message
}
message->enc = PROF_MSG_ENC_PLAIN;
message->plain = strdup(message->body);
_clean_incoming_message(message);
chatwin_incoming_msg(chatwin, message, new_win);
chat_log_msg_in(message);
chatwin->pgp_recv = FALSE;
Expand All @@ -564,6 +573,7 @@ _sv_ev_incoming_otr(ProfChatWin *chatwin, gboolean new_win, ProfMessage *message
message->enc = PROF_MSG_ENC_PLAIN;
}

_clean_incoming_message(message);
chatwin_incoming_msg(chatwin, message, new_win);

chat_log_otr_msg_in(message);
Expand All @@ -578,6 +588,7 @@ _sv_ev_incoming_otr(ProfChatWin *chatwin, gboolean new_win, ProfMessage *message
static void
_sv_ev_incoming_omemo(ProfChatWin *chatwin, gboolean new_win, ProfMessage *message, gboolean logit)
{
_clean_incoming_message(message);
chatwin_incoming_msg(chatwin, message, new_win);
if (logit) {
chat_log_omemo_msg_in(message);
Expand All @@ -592,6 +603,7 @@ _sv_ev_incoming_plain(ProfChatWin *chatwin, gboolean new_win, ProfMessage *messa
if (message->body) {
message->enc = PROF_MSG_ENC_PLAIN;
message->plain = strdup(message->body);
_clean_incoming_message(message);
chatwin_incoming_msg(chatwin, message, new_win);
if (logit) {
chat_log_msg_in(message);
Expand Down Expand Up @@ -1412,3 +1424,21 @@ sv_ev_bookmark_autojoin(Bookmark *bookmark)

free(nick);
}

static void
_clean_incoming_message(ProfMessage *message)
{
if (strstr(message->plain, "\u200E")) {
char **split = g_strsplit(message->plain, "\u200E", -1);
free(message->plain);
message->plain = g_strjoinv("", split);
g_strfreev(split);
}

if (strstr(message->plain, "\u200F")) {
char **split = g_strsplit(message->plain, "\u200F", -1);
free(message->plain);
message->plain = g_strjoinv("", split);
g_strfreev(split);
}
}

0 comments on commit 87f9bac

Please sign in to comment.