diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 8db80c68b..05f938fd8 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -10,6 +10,13 @@ This document lists all the changes for each version. + For a list of important changes that require manual actions, please look at release notes. +[[v4.2.3]] +== Version 4.2.3 (under dev) + +Bug fixes:: + + * irc: fix crash in split of IRC message containing a newline if the server is not given + [[v4.2.2]] == Version 4.2.2 (2024-04-07) diff --git a/src/plugins/irc/irc-message.c b/src/plugins/irc/irc-message.c index 0b27d66e9..c2712e38c 100644 --- a/src/plugins/irc/irc-message.c +++ b/src/plugins/irc/irc-message.c @@ -1683,8 +1683,9 @@ irc_message_split (struct t_irc_server *server, const char *message) } multiline = ( - ((weechat_strcasecmp (command, "privmsg") == 0) - || (weechat_strcasecmp (command, "notice") == 0)) + server + && ((weechat_strcasecmp (command, "privmsg") == 0) + || (weechat_strcasecmp (command, "notice") == 0)) && message && strchr (message, '\n') && (index_args + 1 <= argc - 1) diff --git a/tests/unit/plugins/irc/test-irc-message.cpp b/tests/unit/plugins/irc/test-irc-message.cpp index aed8d4fe8..4e39a8491 100644 --- a/tests/unit/plugins/irc/test-irc-message.cpp +++ b/tests/unit/plugins/irc/test-irc-message.cpp @@ -1997,6 +1997,21 @@ TEST(IrcMessage, Split) hashtable_remove (server->cap_list, "batch"); hashtable_remove (server->cap_list, "draft/multiline"); + /* PRIVMSG with newlines but no server: BATCH is not used */ + hashtable = irc_message_split (NULL, "PRIVMSG #channel :test\n\nline 3"); + CHECK(hashtable); + LONGS_EQUAL(7, hashtable->items_count); + STRCMP_EQUAL("3", (const char *)hashtable_get (hashtable, "count")); + STRCMP_EQUAL("PRIVMSG #channel :test", + (const char *)hashtable_get (hashtable, "msg1")); + STRCMP_EQUAL("test", (const char *)hashtable_get (hashtable, "args1")); + STRCMP_EQUAL("PRIVMSG #channel :", + (const char *)hashtable_get (hashtable, "msg2")); + STRCMP_EQUAL("", (const char *)hashtable_get (hashtable, "args2")); + STRCMP_EQUAL("PRIVMSG #channel :line 3", + (const char *)hashtable_get (hashtable, "msg3")); + STRCMP_EQUAL("line 3", (const char *)hashtable_get (hashtable, "args3")); + /* 005: no split */ hashtable = irc_message_split (server, "005 nick " MSG_005); CHECK(hashtable);