repo: ngircd action: commit revision: path_from: revision_from: 04de1423eb26da60c192d343a7e7a6bcda2aca37: path_to: revision_to:
commit 04de1423eb26da60c192d343a7e7a6bcda2aca37 Author: MichiDate: Tue Apr 14 17:41:52 2020 +0200 Fix recursion bug on write error Depending on the stack size, too many clients on the same channel quitting at the same time would trigger a crash due to too many recursive calls to Conn_Close(). diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -1272,6 +1272,9 @@ Handle_Write( CONN_ID Idx )
if (errno == EAGAIN || errno == EINTR)
return true;
+ /* Log write errors but do not close the connection yet.
+ * Calling Conn_Close() now could result in too many recursive calls.
+ */
if (!Conn_OPTION_ISSET(&My_Connections[Idx], CONN_ISCLOSING))
Log(LOG_ERR,
"Write error on connection %d (socket %d): %s!",
@@ -1279,7 +1282,7 @@ Handle_Write( CONN_ID Idx )
else
LogDebug("Recursive write error on connection %d (socket %d): %s!",
Idx, My_Connections[Idx].sock, strerror(errno));
- Conn_Close(Idx, "Write error", NULL, false);
+
return false;
}
-----END OF PAGE-----