changeset 1152:9eb07d527091 release-4.0

irccd: fix invalid file descriptor, closes #2535
author David Demelier <markand@malikania.fr>
date Sun, 06 Feb 2022 16:02:04 +0100
parents 1a1496eeacf4
children 4d6fe5535657
files lib/irccd/irccd.c lib/irccd/server.c
diffstat 2 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lib/irccd/irccd.c	Sun Feb 06 15:07:20 2022 +0100
+++ b/lib/irccd/irccd.c	Sun Feb 06 16:02:04 2022 +0100
@@ -282,7 +282,7 @@
 	irc_server_incref(s);
 	irc_server_connect(s);
 
-	LL_PREPEND(irc.servers, s);
+	LL_APPEND(irc.servers, s);
 }
 
 struct irc_server *
@@ -624,7 +624,7 @@
 	queue = NULL;
 
 	LL_FOREACH(irc.servers, s)
-		irc_server_flush(s, fds);
+		irc_server_flush(s, fds++);
 }
 
 int
--- a/lib/irccd/server.c	Sun Feb 06 15:07:20 2022 +0100
+++ b/lib/irccd/server.c	Sun Feb 06 16:02:04 2022 +0100
@@ -812,6 +812,8 @@
 			irc_server_connect(s);
 		break;
 	case IRC_SERVER_STATE_CONNECTED:
+		assert(pfd->fd == s->conn->fd);
+
 		if (difftime(time(NULL), s->last_tp) >= TIMEOUT) {
 			irc_log_warn("server %s: no message in more than %u seconds", s->name, TIMEOUT);
 			fail(s);
@@ -821,6 +823,8 @@
 		}
 		break;
 	case IRC_SERVER_STATE_CONNECTING:
+		assert(pfd->fd == s->conn->fd);
+
 		/*
 		 * Now the conn object is ready which means the server has
 		 * to authenticate.