aboutsummaryrefslogtreecommitdiffstats
path: root/irc_im.c
diff options
context:
space:
mode:
Diffstat (limited to 'irc_im.c')
-rw-r--r--irc_im.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/irc_im.c b/irc_im.c
index 0b02ff89..2a956c44 100644
--- a/irc_im.c
+++ b/irc_im.c
@@ -234,7 +234,7 @@ static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, t
msg = s;
} else {
/* Modules can swallow messages. */
- return TRUE;
+ goto cleanup;
}
}
}
@@ -249,8 +249,9 @@ static gboolean bee_irc_user_msg(bee_t *bee, bee_user_t *bu, const char *msg_, t
wrapped = word_wrap(msg, 425);
irc_send_msg(iu, "PRIVMSG", dst, wrapped, prefix);
-
g_free(wrapped);
+
+cleanup:
g_free(prefix);
g_free(msg);
g_free(ts);
@@ -291,6 +292,8 @@ static gboolean bee_irc_user_action_response(bee_t *bee, bee_user_t *bu, const c
irc_send_msg((irc_user_t *) bu->ui_data, "NOTICE", irc->user->nick, msg->str, NULL);
+ g_string_free(msg, TRUE);
+
return TRUE;
}
@@ -694,7 +697,8 @@ static gboolean bee_irc_chat_name_hint(bee_t *bee, struct groupchat *c, const ch
{
irc_t *irc = bee->ui_data;
irc_channel_t *ic = c->ui_data, *oic;
- char stripped[MAX_NICK_LENGTH + 1], *full_name;
+ char *stripped, *full_name;
+ gsize bytes_written;
if (ic == NULL) {
return FALSE;
@@ -705,18 +709,23 @@ static gboolean bee_irc_chat_name_hint(bee_t *bee, struct groupchat *c, const ch
return FALSE;
}
- strncpy(stripped, name, MAX_NICK_LENGTH);
- stripped[MAX_NICK_LENGTH] = '\0';
+ stripped = g_convert_with_fallback(name, -1, "ASCII//TRANSLIT", "UTF-8", "", NULL, &bytes_written, NULL);
+ if (bytes_written > MAX_NICK_LENGTH) {
+ stripped[MAX_NICK_LENGTH] = '\0';
+ }
+
irc_channel_name_strip(stripped);
if (set_getbool(&bee->set, "lcnicks")) {
nick_lc(irc, stripped);
}
if (stripped[0] == '\0') {
+ g_free(stripped);
return FALSE;
}
full_name = g_strdup_printf("#%s", stripped);
+ g_free(stripped);
if ((oic = irc_channel_by_name(irc, full_name))) {
char *type, *chat_type;