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

irc: fix parsing of message 223 (m_filter) sent by InspIRCd server (closes #1751)

This commit is contained in:
Sébastien Helleu
2022-02-10 20:50:16 +01:00
parent d7c8b16c4f
commit ba7ff87d19
3 changed files with 126 additions and 102 deletions
+1
View File
@@ -35,6 +35,7 @@ Bug fixes::
* api: fix add of infolist items in hashtable when prefix contains UTF-8 chars in function hashtable_add_from_infolist (issue #1739)
* irc: fix completion of channel topic with UTF-8 chars (issue #1739)
* irc: fix parsing of messages 311, 312, 327 (whois) and 314 (whowas) in case of missing parameters
* irc: fix parsing of message 223 (m_filter) sent by InspIRCd server (issue #1751)
* irc: fix parsing of message 338 (whois, host) sent by Rizon server (issue #1737)
* irc: fix display of message 344 received as whois geo info (issue #1736)
* irc: fix display of IRC numeric messages with no parameters
+59 -38
View File
@@ -3951,32 +3951,44 @@ IRC_PROTOCOL_CALLBACK(306)
*
* Command looks like:
* 319 mynick nick :some text here
*
* On InspIRCd server (not a whois reply):
* 223 mynick :EXEMPT #help
*/
IRC_PROTOCOL_CALLBACK(whois_nick_msg)
{
char *str_params;
IRC_PROTOCOL_MIN_PARAMS(3);
IRC_PROTOCOL_MIN_PARAMS(2);
str_params = irc_protocol_string_params (params, 2, num_params - 1);
weechat_printf_date_tags (
irc_msgbuffer_get_target_buffer (
server, params[1], command, "whois", NULL),
date,
irc_protocol_tags (command, tags, "irc_numeric", NULL, NULL),
"%s%s[%s%s%s] %s%s",
weechat_prefix ("network"),
IRC_COLOR_CHAT_DELIMITERS,
irc_nick_color_for_msg (server, 1, NULL, params[1]),
params[1],
IRC_COLOR_CHAT_DELIMITERS,
IRC_COLOR_RESET,
str_params);
if (str_params)
free (str_params);
if (num_params >= 3)
{
str_params = irc_protocol_string_params (params, 2, num_params - 1);
weechat_printf_date_tags (
irc_msgbuffer_get_target_buffer (
server, params[1], command, "whois", NULL),
date,
irc_protocol_tags (command, tags, "irc_numeric", NULL, NULL),
"%s%s[%s%s%s] %s%s",
weechat_prefix ("network"),
IRC_COLOR_CHAT_DELIMITERS,
irc_nick_color_for_msg (server, 1, NULL, params[1]),
params[1],
IRC_COLOR_CHAT_DELIMITERS,
IRC_COLOR_RESET,
str_params);
if (str_params)
free (str_params);
}
else
{
/*
* not enough parameters: this should not be a whois command so we
* display the arguments as-is
*/
IRC_PROTOCOL_RUN_CALLBACK(numeric);
}
return WEECHAT_RC_OK;
}
@@ -3992,26 +4004,35 @@ IRC_PROTOCOL_CALLBACK(whowas_nick_msg)
{
char *str_params;
IRC_PROTOCOL_MIN_PARAMS(3);
IRC_PROTOCOL_MIN_PARAMS(2);
str_params = irc_protocol_string_params (params, 2, num_params - 1);
weechat_printf_date_tags (
irc_msgbuffer_get_target_buffer (
server, params[1], command, "whowas", NULL),
date,
irc_protocol_tags (command, tags, "irc_numeric", NULL, NULL),
"%s%s[%s%s%s] %s%s",
weechat_prefix ("network"),
IRC_COLOR_CHAT_DELIMITERS,
irc_nick_color_for_msg (server, 1, NULL, params[1]),
params[1],
IRC_COLOR_CHAT_DELIMITERS,
IRC_COLOR_RESET,
str_params);
if (str_params)
free (str_params);
if (num_params >= 3)
{
str_params = irc_protocol_string_params (params, 2, num_params - 1);
weechat_printf_date_tags (
irc_msgbuffer_get_target_buffer (
server, params[1], command, "whowas", NULL),
date,
irc_protocol_tags (command, tags, "irc_numeric", NULL, NULL),
"%s%s[%s%s%s] %s%s",
weechat_prefix ("network"),
IRC_COLOR_CHAT_DELIMITERS,
irc_nick_color_for_msg (server, 1, NULL, params[1]),
params[1],
IRC_COLOR_CHAT_DELIMITERS,
IRC_COLOR_RESET,
str_params);
if (str_params)
free (str_params);
}
else
{
/*
* not enough parameters: this should not be a whowas command so we
* display the arguments as-is
*/
IRC_PROTOCOL_RUN_CALLBACK(numeric);
}
return WEECHAT_RC_OK;
}
+66 -64
View File
@@ -2239,128 +2239,130 @@ TEST(IrcProtocolWithServer, whois_nick_msg)
/* not enough parameters */
RECV(":server 223");
CHECK_ERROR_PARAMS("223", 0, 3);
CHECK_ERROR_PARAMS("223", 0, 2);
RECV(":server 223 alice");
CHECK_ERROR_PARAMS("223", 1, 3);
RECV(":server 223 alice bob");
CHECK_ERROR_PARAMS("223", 2, 3);
CHECK_ERROR_PARAMS("223", 1, 2);
RECV(":server 264");
CHECK_ERROR_PARAMS("264", 0, 3);
CHECK_ERROR_PARAMS("264", 0, 2);
RECV(":server 264 alice");
CHECK_ERROR_PARAMS("264", 1, 3);
RECV(":server 264 alice bob");
CHECK_ERROR_PARAMS("264", 2, 3);
CHECK_ERROR_PARAMS("264", 1, 2);
RECV(":server 275");
CHECK_ERROR_PARAMS("275", 0, 3);
CHECK_ERROR_PARAMS("275", 0, 2);
RECV(":server 275 alice");
CHECK_ERROR_PARAMS("275", 1, 3);
RECV(":server 275 alice bob");
CHECK_ERROR_PARAMS("275", 2, 3);
CHECK_ERROR_PARAMS("275", 1, 2);
RECV(":server 276");
CHECK_ERROR_PARAMS("276", 0, 3);
CHECK_ERROR_PARAMS("276", 0, 2);
RECV(":server 276 alice");
CHECK_ERROR_PARAMS("276", 1, 3);
RECV(":server 276 alice bob");
CHECK_ERROR_PARAMS("276", 2, 3);
CHECK_ERROR_PARAMS("276", 1, 2);
RECV(":server 307");
CHECK_ERROR_PARAMS("307", 0, 3);
CHECK_ERROR_PARAMS("307", 0, 2);
RECV(":server 307 alice");
CHECK_ERROR_PARAMS("307", 1, 3);
RECV(":server 307 alice bob");
CHECK_ERROR_PARAMS("307", 2, 3);
CHECK_ERROR_PARAMS("307", 1, 2);
RECV(":server 310");
CHECK_ERROR_PARAMS("310", 0, 3);
CHECK_ERROR_PARAMS("310", 0, 2);
RECV(":server 310 alice");
CHECK_ERROR_PARAMS("310", 1, 3);
RECV(":server 310 alice bob");
CHECK_ERROR_PARAMS("310", 2, 3);
CHECK_ERROR_PARAMS("310", 1, 2);
RECV(":server 313");
CHECK_ERROR_PARAMS("313", 0, 3);
CHECK_ERROR_PARAMS("313", 0, 2);
RECV(":server 313 alice");
CHECK_ERROR_PARAMS("313", 1, 3);
RECV(":server 313 alice bob");
CHECK_ERROR_PARAMS("313", 2, 3);
CHECK_ERROR_PARAMS("313", 1, 2);
RECV(":server 318");
CHECK_ERROR_PARAMS("318", 0, 3);
CHECK_ERROR_PARAMS("318", 0, 2);
RECV(":server 318 alice");
CHECK_ERROR_PARAMS("318", 1, 3);
RECV(":server 318 alice bob");
CHECK_ERROR_PARAMS("318", 2, 3);
CHECK_ERROR_PARAMS("318", 1, 2);
RECV(":server 319");
CHECK_ERROR_PARAMS("319", 0, 3);
CHECK_ERROR_PARAMS("319", 0, 2);
RECV(":server 319 alice");
CHECK_ERROR_PARAMS("319", 1, 3);
RECV(":server 319 alice bob");
CHECK_ERROR_PARAMS("319", 2, 3);
CHECK_ERROR_PARAMS("319", 1, 2);
RECV(":server 320");
CHECK_ERROR_PARAMS("320", 0, 3);
CHECK_ERROR_PARAMS("320", 0, 2);
RECV(":server 320 alice");
CHECK_ERROR_PARAMS("320", 1, 3);
RECV(":server 320 alice bob");
CHECK_ERROR_PARAMS("320", 2, 3);
CHECK_ERROR_PARAMS("320", 1, 2);
RECV(":server 326");
CHECK_ERROR_PARAMS("326", 0, 3);
CHECK_ERROR_PARAMS("326", 0, 2);
RECV(":server 326 alice");
CHECK_ERROR_PARAMS("326", 1, 3);
RECV(":server 326 alice bob");
CHECK_ERROR_PARAMS("326", 2, 3);
CHECK_ERROR_PARAMS("326", 1, 2);
RECV(":server 335");
CHECK_ERROR_PARAMS("335", 0, 3);
CHECK_ERROR_PARAMS("335", 0, 2);
RECV(":server 335 alice");
CHECK_ERROR_PARAMS("335", 1, 3);
RECV(":server 335 alice bob");
CHECK_ERROR_PARAMS("335", 2, 3);
CHECK_ERROR_PARAMS("335", 1, 2);
RECV(":server 378");
CHECK_ERROR_PARAMS("378", 0, 3);
CHECK_ERROR_PARAMS("378", 0, 2);
RECV(":server 378 alice");
CHECK_ERROR_PARAMS("378", 1, 3);
RECV(":server 378 alice bob");
CHECK_ERROR_PARAMS("378", 2, 3);
CHECK_ERROR_PARAMS("378", 1, 2);
RECV(":server 379");
CHECK_ERROR_PARAMS("379", 0, 3);
CHECK_ERROR_PARAMS("379", 0, 2);
RECV(":server 379 alice");
CHECK_ERROR_PARAMS("379", 1, 3);
RECV(":server 379 alice bob");
CHECK_ERROR_PARAMS("379", 2, 3);
CHECK_ERROR_PARAMS("379", 1, 2);
RECV(":server 671");
CHECK_ERROR_PARAMS("671", 0, 3);
CHECK_ERROR_PARAMS("671", 0, 2);
RECV(":server 671 alice");
CHECK_ERROR_PARAMS("671", 1, 3);
RECV(":server 671 alice bob");
CHECK_ERROR_PARAMS("671", 2, 3);
CHECK_ERROR_PARAMS("671", 1, 2);
RECV(":server 223 alice bob UTF-8");
CHECK_SRV("-- [bob] UTF-8");
RECV(":server 223 alice bob :UTF-8");
CHECK_SRV("-- [bob] UTF-8");
RECV(":server 223 alice bob");
CHECK_SRV("-- bob");
RECV(":server 264 alice bob :is using encrypted connection");
CHECK_SRV("-- [bob] is using encrypted connection");
RECV(":server 264 alice bob");
CHECK_SRV("-- bob");
RECV(":server 275 alice bob :is using secure connection");
CHECK_SRV("-- [bob] is using secure connection");
RECV(":server 275 alice bob");
CHECK_SRV("-- bob");
RECV(":server 276 alice bob :has client certificate fingerprint");
CHECK_SRV("-- [bob] has client certificate fingerprint");
RECV(":server 276 alice bob");
CHECK_SRV("-- bob");
RECV(":server 307 alice bob :registered nick");
CHECK_SRV("-- [bob] registered nick");
RECV(":server 307 alice bob");
CHECK_SRV("-- bob");
RECV(":server 310 alice bob :help mode");
CHECK_SRV("-- [bob] help mode");
RECV(":server 310 alice bob");
CHECK_SRV("-- bob");
RECV(":server 313 alice bob :operator");
CHECK_SRV("-- [bob] operator");
RECV(":server 313 alice bob");
CHECK_SRV("-- bob");
RECV(":server 318 alice bob :end");
CHECK_SRV("-- [bob] end");
RECV(":server 318 alice bob");
CHECK_SRV("-- bob");
RECV(":server 319 alice bob :channels");
CHECK_SRV("-- [bob] channels");
RECV(":server 319 alice bob");
CHECK_SRV("-- bob");
RECV(":server 320 alice bob :identified user");
CHECK_SRV("-- [bob] identified user");
RECV(":server 320 alice bob");
CHECK_SRV("-- bob");
RECV(":server 326 alice bob :has oper privs");
CHECK_SRV("-- [bob] has oper privs");
RECV(":server 326 alice bob");
CHECK_SRV("-- bob");
RECV(":server 335 alice bob :is a bot");
CHECK_SRV("-- [bob] is a bot");
RECV(":server 335 alice bob");
CHECK_SRV("-- bob");
RECV(":server 378 alice bob");
CHECK_SRV("-- bob");
RECV(":server 378 alice bob :connecting from");
CHECK_SRV("-- [bob] connecting from");
RECV(":server 378 alice bob");
CHECK_SRV("-- bob");
RECV(":server 379 alice bob :using modes");
CHECK_SRV("-- [bob] using modes");
RECV(":server 379 alice bob");
CHECK_SRV("-- bob");
RECV(":server 671 alice bob :secure connection");
CHECK_SRV("-- [bob] secure connection");
RECV(":server 671 alice bob");
CHECK_SRV("-- bob");
}
/*
@@ -2377,16 +2379,16 @@ TEST(IrcProtocolWithServer, whowas_nick_msg)
/* not enough parameters */
RECV(":server 369");
CHECK_ERROR_PARAMS("369", 0, 3);
CHECK_ERROR_PARAMS("369", 0, 2);
RECV(":server 369 alice");
CHECK_ERROR_PARAMS("369", 1, 3);
RECV(":server 369 alice bob");
CHECK_ERROR_PARAMS("369", 2, 3);
CHECK_ERROR_PARAMS("369", 1, 2);
RECV(":server 369 alice bob end");
CHECK_SRV("-- [bob] end");
RECV(":server 369 alice bob :end");
CHECK_SRV("-- [bob] end");
RECV(":server 369 alice bob");
CHECK_SRV("-- bob");
}
/*