Mercurial > hg > openttd
changeset 17643:f9a8beb3c108 draft
(svn r22414) -Fix [FS#4606]: kicking thyself via remote console crashes the server
author | rubidium <rubidium@openttd.org> |
---|---|
date | Tue, 03 May 2011 15:05:15 +0000 |
parents | d8caba096f22 |
children | 87028d4260be |
files | src/console_cmds.cpp |
diffstat | 1 files changed, 5 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -495,7 +495,11 @@ if (strchr(argv, '.') == NULL && strchr(argv, ':') == NULL) { // banning with ID ClientID client_id = (ClientID)atoi(argv); - if (client_id == CLIENT_ID_SERVER) { + /* Don't kill the server, or the client doing the rcon. The latter can't be kicked because + * kicking frees closes and subsequently free the connection related instances, which we + * would be reading from and writing to after returning. So we would read or write data + * from freed memory up till the segfault triggers. */ + if (client_id == CLIENT_ID_SERVER || client_id == _redirect_console_to_client) { IConsolePrintF(CC_ERROR, "ERROR: Silly boy, you can not %s yourself!", ban ? "ban" : "kick"); return true; }