summary refs log tree commit diff
diff options
context:
space:
mode:
authorNakidai <nakidai@disroot.org>2026-02-05 14:16:12 +0300
committerNakidai <nakidai@disroot.org>2026-02-05 14:16:12 +0300
commit30bee4aa0e19de4e2535d884ef65f254867168ab (patch)
tree175600648ad678f7ba42e7c05aff20a9f166cb3a
parent68a91231a9480d591b43b359ad9a02af1faef07b (diff)
downloadlibreircd-30bee4aa0e19de4e2535d884ef65f254867168ab.tar.gz
libreircd-30bee4aa0e19de4e2535d884ef65f254867168ab.zip
Fix UB with reply 461
It requires a parameter command, but no caller provided it :/
-rw-r--r--handle.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/handle.c b/handle.c
index fb08f73..088b756 100644
--- a/handle.c
+++ b/handle.c
@@ -38,7 +38,7 @@ join(struct Message *msg, struct Peer *peer)
 
 	/* TODO: support comma separated list of channels, keys */
 	ensure(peer->type, reply(peer, 451), 0);
-	ensure(msg->params[0] && *msg->params[0], reply(peer, 461), 0);
+	ensure(msg->params[0] && *msg->params[0], reply(peer, 461, msg->command), 0);
 	ensure(peer->channels_c != lengthof(peer->channels), reply(peer, 405, msg->params[0]), 0)
 	ensure(*msg->params[0] == '#', reply(peer, 403, msg->params[0]), 0);
 
@@ -200,7 +200,7 @@ oper(struct Message *msg, struct Peer *peer)
 	size_t i;
 
 	ensure(peer->type, reply(peer, 451), 0);
-	ensure(msg->params[0] && *msg->params[0], reply(peer, 461), 0);
+	ensure(msg->params[0] && *msg->params[0], reply(peer, 461, msg->command), 0);
 	ensure(msg->params[1] && *msg->params[1], reply(peer, 464), 0);
 
 	for (i = 0; i < opers_c; ++i)
@@ -220,7 +220,7 @@ part(struct Message *msg, struct Peer *peer)
 	size_t i;
 
 	ensure(peer->type, reply(peer, 451), 0);
-	ensure(msg->params[0] && *msg->params[0], reply(peer, 461), 0);
+	ensure(msg->params[0] && *msg->params[0], reply(peer, 461, msg->command), 0);
 
 	for (i = 0; i < peer->channels_c; ++i)
 		if (!strcmp(peer->channels[i]->name, msg->params[0]))
@@ -347,7 +347,7 @@ static int
 setcreation(struct Message *msg, struct Peer *peer)
 {
 	ensure(peer->type == CONFIG, reply(peer, 481, "You're not a config file"), 0);
-	ensure(msg->params[0] && *msg->params[0], reply(peer, 461), 0);
+	ensure(msg->params[0] && *msg->params[0], reply(peer, 461, msg->command), 0);
 
 	strlcpy(creation, msg->params[0], sizeof(creation));
 
@@ -358,7 +358,7 @@ static int
 setinfo(struct Message *msg, struct Peer *peer)
 {
 	ensure(peer->type == CONFIG, reply(peer, 481, "You're not a config file"), 0);
-	ensure(msg->params[0] && *msg->params[0], reply(peer, 461), 0);
+	ensure(msg->params[0] && *msg->params[0], reply(peer, 461, msg->command), 0);
 
 	strlcpy(info, msg->params[0], sizeof(info));
 
@@ -371,8 +371,8 @@ setoper(struct Message *msg, struct Peer *peer)
 	size_t i;
 
 	ensure(peer->type == CONFIG, reply(peer, 481, "You're not a config file"), 0);
-	ensure(msg->params[0] && *msg->params[0], reply(peer, 461), 0);
-	ensure(msg->params[1], reply(peer, 461), 0);
+	ensure(msg->params[0] && *msg->params[0], reply(peer, 461, msg->command), 0);
+	ensure(msg->params[1], reply(peer, 461, msg->command), 0);
 	ensure(
 		!*msg->params[1] || *msg->params[1] && opers_c < OPERS_MAX,
 		reply(peer, 420, msg->params[0]),
@@ -405,7 +405,7 @@ user(struct Message *msg, struct Peer *peer)
 
 	ensure(!peer->type, reply(peer, 462), 0);
 	for (i = 0; i < 4; ++i)
-		ensure(msg->params[i] && *msg->params[i], reply(peer, 461), 0);
+		ensure(msg->params[i] && *msg->params[i], reply(peer, 461, msg->command), 0);
 
 	for (cp = msg->params[0]; *cp; ++cp)
 		if (*cp == '@')