commit 7dba1a0766b35d01cd8892753d1e0dd578ca2cd9 from: Alexander Barton date: Thu Jan 07 00:54:11 2016 UTC Send_Message: Fix handling of "empty" targets Clients can specify multiple targets for the "PRIVMSG", "NOTICE", and "SQUERY" commands, separated by commas (e. g. "PRIVMSG a,#b,c :text"). Since commit 49ab79d0 ("Limit the number of message targes, and suppress duplicates"), ngIRCd crashed when the client sent the separator character only as target(s), e. g. "," or ",,,," etc.! This patch fixes the bug and adds a test case for this issue. Thanks to Florian Westphal for spotting the issue! commit - 055d6e80561cc56fd2218c7698b3063931c8c17e commit + 7dba1a0766b35d01cd8892753d1e0dd578ca2cd9 blob - 15bb90f73ced63e4d7134d5f49b56fb893debd2a blob + 5325b52aedaa7ef3cd470f9ef09a7a9c3bb2a2d7 --- src/ngircd/irc.c +++ src/ngircd/irc.c @@ -563,7 +563,9 @@ Send_Message(CLIENT * Client, REQUEST * Req, int Force currentTarget = strtok_r(currentTarget, ",", &strtok_last); ngt_UpperStr(Req->command); - while (true) { + /* Please note that "currentTarget" is NULL when the target contains + * the separator character only, e. g. "," or ",,,," etc.! */ + while (currentTarget) { /* Make sure that there hasn't been such a target already: */ targets[target_nr++] = currentTarget; for(i = 0; i < target_nr - 1; i++) { blob - e46378637b8c2ff44df43a85d13911484809eeec blob + 9eb22e77896fd0bd6241059147c3093861d1ecd0 --- src/testsuite/message-test.e +++ src/testsuite/message-test.e @@ -38,6 +38,17 @@ expect { "@* PRIVMSG nick :test" } +send "privmsg ,,,, :dummy\r" +send "privmsg ,,,nick,,&server,,, :test\r" +expect { + timeout { exit 1 } + "@* PRIVMSG nick :test" +} +expect { + timeout { exit 1 } + "404" +} + send "privmsg Nick,#testChannel,nick :test\r" expect { timeout { exit 1 }