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;
 		}