1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-26 12:56:37 +02:00

irc: do not allow send of empty messages (single line or multiline)

This commit is contained in:
Sébastien Helleu
2023-05-14 14:09:49 +02:00
parent ac83130dd7
commit 283c9d7ccf
3 changed files with 66 additions and 5 deletions
+41 -5
View File
@@ -637,6 +637,34 @@ irc_message_parse_cap_multiline_value (struct t_irc_server *server,
weechat_hashtable_free (values);
}
/*
* Checks if a message is empty: either empty string or contains only newlines.
*
* Returns:
* 1: message is empty
* 0: message is NOT empty
*/
int
irc_message_is_empty (const char *message)
{
const char *ptr_msg;
if (!message || !message[0])
return 1;
ptr_msg = message;
while (ptr_msg && ptr_msg[0])
{
if (ptr_msg[0] != '\n')
return 0;
ptr_msg = weechat_utf8_next_char (ptr_msg);
}
/* only newlines => consider message is empty */
return 1;
}
/*
* Encodes/decodes an IRC message using a charset.
*
@@ -1309,6 +1337,10 @@ irc_message_split_privmsg_notice (struct t_irc_message_split_context *context,
rc = 1;
/* privmsg/notice with empty message: not allowed */
if (irc_message_is_empty (arguments))
return 1;
if (multiline)
{
index_multiline_args = 1;
@@ -1499,15 +1531,17 @@ irc_message_split (struct t_irc_server *server, const char *message)
struct t_irc_message_split_context split_context;
char **argv, **argv_eol, *tags, *host, *command, *arguments, target[4096];
char *pos, monitor_action[3];
int split_ok, argc, index_args, max_length_nick, max_length_user;
int max_length_host, max_length_nick_user_host, split_msg_max_length;
int multiline, multiline_max_bytes, multiline_max_lines;
int split_ok, split_privmsg, argc, index_args, max_length_nick;
int max_length_user, max_length_host, max_length_nick_user_host;
int split_msg_max_length, multiline, multiline_max_bytes;
int multiline_max_lines;
split_context.hashtable = NULL;
split_context.number = 1;
split_context.total_bytes = 0;
split_ok = 0;
split_privmsg = 0;
tags = NULL;
host = NULL;
command = NULL;
@@ -1679,6 +1713,7 @@ irc_message_split (struct t_irc_server *server, const char *message)
* PRIVMSG target :some text here
* NOTICE target :some text here
*/
split_privmsg = 1;
if (index_args + 1 <= argc - 1)
{
split_ok = irc_message_split_privmsg_notice (
@@ -1738,8 +1773,9 @@ irc_message_split (struct t_irc_server *server, const char *message)
end:
if (!split_ok
|| (weechat_hashtable_get_integer (split_context.hashtable,
"items_count") == 0))
|| (!split_privmsg
&& (weechat_hashtable_get_integer (split_context.hashtable,
"items_count") == 0)))
{
split_context.number = (message) ? 1 : 0;
irc_message_split_add (&split_context,
+1
View File
@@ -46,6 +46,7 @@ extern struct t_hashtable *irc_message_parse_to_hashtable (struct t_irc_server *
extern struct t_hashtable *irc_message_parse_cap_value (const char *value);
extern void irc_message_parse_cap_multiline_value (struct t_irc_server *server,
const char *value);
extern int irc_message_is_empty (const char *message);
extern char *irc_message_convert_charset (const char *message,
int pos_start,
const char *modifier,