Index: src/network/network_server.cpp =================================================================== --- src/network/network_server.cpp (revision 10073) +++ src/network/network_server.cpp (working copy) @@ -850,7 +850,10 @@ callback = p->Recv_uint8(); - if (cs->has_quit) return; + if (cs->has_quit) { + free(cp); + return; + } ci = DEREF_CLIENT_INFO(cs); @@ -858,11 +861,13 @@ if (!IsValidCommand(cp->cmd)) { IConsolePrintF(_icolour_err, "WARNING: invalid command from client %d (IP: %s).", ci->client_index, GetPlayerIP(ci)); SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_NOT_EXPECTED); + free(cp); return; } if (!CheckCommandFlags(cp, ci)) { SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_KICKED); + free(cp); return; } @@ -874,6 +879,7 @@ IConsolePrintF(_icolour_err, "WARNING: player %d (IP: %s) tried to execute a command as player %d, kicking...", ci->client_playas + 1, GetPlayerIP(ci), cp->player + 1); SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_PLAYER_MISMATCH); + free(cp); return; } @@ -885,6 +891,7 @@ if (cp->cmd == CMD_PLAYER_CTRL) { if (cp->p1 != 0) { SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_CHEATER); + free(cp); return; }