inspircd

A modular C++ IRC daemon (ircd). https://www.inspircd.org/
Log | Files | Refs | README

commit 20ef7d19f7b684ea34ff1cd96450744920ab4a65
parent c495b5d9cf8bed4f07c0b77a1f9e98dcc1f62068
Author: linuxdaemon <linuxdaemon@snoonet.org>
Date:   Wed, 20 Feb 2019 01:29:15 -0600

Fix not showing all modes on a channel

Whenever a mode has a parameter, no modes past that mode will be shown
in RPL_CHANNELMODEIS.

References to items in a vector break when the vector's size is changed.

Diffstat:
Msrc/coremods/core_user/cmd_mode.cpp | 4+++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/coremods/core_user/cmd_mode.cpp b/src/coremods/core_user/cmd_mode.cpp @@ -152,7 +152,8 @@ namespace // the user is a member of the channel. bool show_secret = chan->HasUser(user); - std::string& modes = num.push("+").GetParams().back(); + size_t modepos = num.push("+").GetParams().size() - 1; + std::string modes; std::string param; for (unsigned char chr = 65; chr < 123; ++chr) { @@ -182,6 +183,7 @@ namespace num.push(param); param.clear(); } + num.GetParams()[modepos].append(modes); } }