The IRC spec mandates that spaces be used as separators between the
arguments for a command. However, the last parameter may itself contain
spaces, and to allow this, one can prefix that argument with a colon.
Instead of checking if the colon is needed, Quassel just always added
a colon to the last argument, which usually works fine. However, it broke
some uses of custom server commands.
This fix now checks if the last argument contains a space or starts with
a colon (which then needs to be escaped), and leaves it alone otherwise.
Fixes #1173 - thanks to Gunnar Beutner for providing the patch.
msg += ":" + prefix + " ";
msg += cmd.toUpper().toAscii();
msg += ":" + prefix + " ";
msg += cmd.toUpper().toAscii();
- for (int i = 0; i < params.size() - 1; i++) {
- msg += " " + params[i];
+ for (int i = 0; i < params.size(); i++) {
+ msg += " ";
+
+ if (i == params.size() - 1 && (params[i].contains(' ') || (!params[i].isEmpty() && params[i][0] == ':')))
+ msg += ":";
+
+ msg += params[i];
- if (!params.isEmpty())
- msg += " :" + params.last();