From 1969c9125fbde0d420c22cebc7578b4473a7aac0 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Sun, 5 Apr 2020 13:17:38 -0400 Subject: Error on missing MODE parameters --- handle.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/handle.c b/handle.c index 8e91810..0719754 100644 --- a/handle.c +++ b/handle.c @@ -677,7 +677,9 @@ static void handleMode(struct Message *msg) { if (!name) name = ""; if (strchr(network.prefixModes, *ch)) { - assert(i < ParamCap); + if (i >= ParamCap || !msg->params[i]) { + errx(EX_PROTOCOL, "MODE missing %s parameter", mode); + } char *nick = msg->params[i++]; char prefix = network.prefixes[ strchr(network.prefixModes, *ch) - network.prefixModes @@ -696,7 +698,9 @@ static void handleMode(struct Message *msg) { } if (strchr(network.listModes, *ch)) { - assert(i < ParamCap); + if (i >= ParamCap || !msg->params[i]) { + errx(EX_PROTOCOL, "MODE missing %s parameter", mode); + } char *mask = msg->params[i++]; if (*ch == 'b') { verb = (set ? "bans" : "unbans"); @@ -727,7 +731,9 @@ static void handleMode(struct Message *msg) { } if (strchr(network.paramModes, *ch)) { - assert(i < ParamCap); + if (i >= ParamCap || !msg->params[i]) { + errx(EX_PROTOCOL, "MODE missing %s parameter", mode); + } char *param = msg->params[i++]; uiFormat( id, Cold, tagTime(msg), @@ -742,7 +748,9 @@ static void handleMode(struct Message *msg) { } if (strchr(network.setParamModes, *ch) && set) { - assert(i < ParamCap); + if (i >= ParamCap || !msg->params[i]) { + errx(EX_PROTOCOL, "MODE missing %s parameter", mode); + } char *param = msg->params[i++]; uiFormat( id, Cold, tagTime(msg), -- cgit 1.4.1