Read_Request(): don't access possibly free'd CLIENT structure
Handle_Buffer() can shut down connections and remove clients, so after calling it, we have to make sure that our CLIENT pointer is still valid.
This commit is contained in:
parent
9fff9f6a2b
commit
765dc320f1
|
@ -1455,16 +1455,21 @@ Read_Request( CONN_ID Idx )
|
||||||
|
|
||||||
/* Update connection statistics */
|
/* Update connection statistics */
|
||||||
My_Connections[Idx].bytes_in += len;
|
My_Connections[Idx].bytes_in += len;
|
||||||
|
My_Connections[Idx].bps += Handle_Buffer(Idx);
|
||||||
|
|
||||||
|
/* Make sure that there is still a valid client registered */
|
||||||
|
c = Conn_GetClient(Idx);
|
||||||
|
if (!c)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Update timestamp of last data received if this connection is
|
/* Update timestamp of last data received if this connection is
|
||||||
* registered as a user, server or service connection. Don't update
|
* registered as a user, server or service connection. Don't update
|
||||||
* otherwise, so users have at least Conf_PongTimeout seconds time to
|
* otherwise, so users have at least Conf_PongTimeout seconds time to
|
||||||
* register with the IRC server -- see Check_Connections().
|
* register with the IRC server -- see Check_Connections().
|
||||||
* Update "lastping", too, if time shifted backwards ... */
|
* Update "lastping", too, if time shifted backwards ... */
|
||||||
c = Conn_GetClient(Idx);
|
if (Client_Type(c) == CLIENT_USER
|
||||||
if (c && (Client_Type(c) == CLIENT_USER
|
|
||||||
|| Client_Type(c) == CLIENT_SERVER
|
|| Client_Type(c) == CLIENT_SERVER
|
||||||
|| Client_Type(c) == CLIENT_SERVICE)) {
|
|| Client_Type(c) == CLIENT_SERVICE) {
|
||||||
t = time(NULL);
|
t = time(NULL);
|
||||||
if (My_Connections[Idx].lastdata != t)
|
if (My_Connections[Idx].lastdata != t)
|
||||||
My_Connections[Idx].bps = 0;
|
My_Connections[Idx].bps = 0;
|
||||||
|
@ -1475,7 +1480,6 @@ Read_Request( CONN_ID Idx )
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Look at the data in the (read-) buffer of this connection */
|
/* Look at the data in the (read-) buffer of this connection */
|
||||||
My_Connections[Idx].bps += Handle_Buffer(Idx);
|
|
||||||
if (Client_Type(c) != CLIENT_SERVER
|
if (Client_Type(c) != CLIENT_SERVER
|
||||||
&& Client_Type(c) != CLIENT_UNKNOWNSERVER
|
&& Client_Type(c) != CLIENT_UNKNOWNSERVER
|
||||||
&& Client_Type(c) != CLIENT_SERVICE
|
&& Client_Type(c) != CLIENT_SERVICE
|
||||||
|
|
Loading…
Reference in New Issue