(CVE-2008-1996). Before this, the application would crash if too many TCP connections are opened.
47 lines
1.6 KiB
Text
47 lines
1.6 KiB
Text
$NetBSD: patch-ab,v 1.3 2008/05/11 04:12:34 tonnerre Exp $
|
|
|
|
--- src/icqd-chat.cpp.orig 2007-09-09 14:05:24.000000000 +0200
|
|
+++ src/icqd-chat.cpp
|
|
@@ -23,6 +23,7 @@
|
|
// Localization
|
|
#include "gettext.h"
|
|
|
|
+#define MAX_CONNECTS 256
|
|
#define DEBUG_THREADS(x)
|
|
|
|
|
|
@@ -2383,16 +2384,24 @@ void *ChatManager_tep(void *arg)
|
|
// Connection on the server port ---------------------------------------
|
|
else if (nCurrentSocket == chatman->chatServer.Descriptor())
|
|
{
|
|
- CChatUser *u = new CChatUser;
|
|
- u->m_pClient = new CChatClient;
|
|
-
|
|
- chatman->chatServer.RecvConnection(u->sock);
|
|
- chatman->sockman.AddSocket(&u->sock);
|
|
- chatman->sockman.DropSocket(&u->sock);
|
|
-
|
|
- u->state = CHAT_STATE_HANDSHAKE;
|
|
- chatman->chatUsers.push_back(u);
|
|
- gLog.Info(tr("%sChat: Received connection.\n"), L_TCPxSTR);
|
|
+ if (chatman->sockman.Num() >= MAX_CONNECTS)
|
|
+ {
|
|
+ // Too many sockets, drop this one
|
|
+ gLog.Warn(tr("%sToo many connected clients, rejecting new connection.\n"), L_WARNxSTR);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ CChatUser *u = new CChatUser;
|
|
+ u->m_pClient = new CChatClient;
|
|
+
|
|
+ chatman->chatServer.RecvConnection(u->sock);
|
|
+ chatman->sockman.AddSocket(&u->sock);
|
|
+ chatman->sockman.DropSocket(&u->sock);
|
|
+
|
|
+ u->state = CHAT_STATE_HANDSHAKE;
|
|
+ chatman->chatUsers.push_back(u);
|
|
+ gLog.Info(tr("%sChat: Received connection.\n"), L_TCPxSTR);
|
|
+ }
|
|
}
|
|
|
|
// Message from connected socket----------------------------------------
|