# HG changeset patch # User rubidium # Date 1216295277 0 # Node ID db49ce10b3b567ddb8fbb2d7178e41f4d25c8052 # Parent 3ea6a520b475699e78e52e30307907ccbe5c99cd (svn r13713) -Fix: possible crash on creating a network packet. diff -r 3ea6a520b475 -r db49ce10b3b5 src/network/core/config.h --- a/src/network/core/config.h Thu Jul 17 11:20:45 2008 +0000 +++ b/src/network/core/config.h Thu Jul 17 11:47:57 2008 +0000 @@ -20,7 +20,7 @@ SEND_MTU = 1460, ///< Number of bytes we can pack in a single packet NETWORK_GAME_INFO_VERSION = 4, ///< What version of game-info do we use? - NETWORK_COMPANY_INFO_VERSION = 4, ///< What version of company info is this? + NETWORK_COMPANY_INFO_VERSION = 5, ///< What version of company info is this? NETWORK_MASTER_SERVER_VERSION = 1, ///< What version of master-server-protocol do we use? NETWORK_NAME_LENGTH = 80, ///< The maximum length of the server name and map name, in bytes including '\0' diff -r 3ea6a520b475 -r db49ce10b3b5 src/network/network_udp.cpp --- a/src/network/network_udp.cpp Thu Jul 17 11:20:45 2008 +0000 +++ b/src/network/network_udp.cpp Thu Jul 17 11:47:57 2008 +0000 @@ -108,12 +108,6 @@ DEF_UDP_RECEIVE_COMMAND(Server, PACKET_UDP_CLIENT_DETAIL_INFO) { - NetworkTCPSocketHandler *cs; - NetworkClientInfo *ci; - Player *player; - byte current = 0; - int i; - // Just a fail-safe.. should never happen if (!_network_udp_server) return; @@ -126,6 +120,8 @@ /* Fetch the latest version of everything */ NetworkPopulateCompanyInfo(); + Player *player; + byte current = 0; /* Go through all the players */ FOR_ALL_PLAYERS(player) { /* Skip non-active players */ @@ -146,58 +142,15 @@ /* Send 1 if there is a passord for the company else send 0 */ packet.Send_bool (!StrEmpty(_network_player_info[player->index].password)); - for (i = 0; i < NETWORK_VEHICLE_TYPES; i++) + for (int i = 0; i < NETWORK_VEHICLE_TYPES; i++) { packet.Send_uint16(_network_player_info[player->index].num_vehicle[i]); - - for (i = 0; i < NETWORK_STATION_TYPES; i++) - packet.Send_uint16(_network_player_info[player->index].num_station[i]); - - /* Find the clients that are connected to this player */ - FOR_ALL_CLIENTS(cs) { - ci = DEREF_CLIENT_INFO(cs); - if (ci->client_playas == player->index) { - packet.Send_bool (true); - packet.Send_string(ci->client_name); - packet.Send_string(ci->unique_id); - packet.Send_uint32(ci->join_date); - } - } - /* Also check for the server itself */ - ci = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX); - if (ci->client_playas == player->index) { - packet.Send_bool (true); - packet.Send_string(ci->client_name); - packet.Send_string(ci->unique_id); - packet.Send_uint32(ci->join_date); } - /* Indicates end of client list */ - packet.Send_bool(false); - } - - /* And check if we have any spectators */ - FOR_ALL_CLIENTS(cs) { - ci = DEREF_CLIENT_INFO(cs); - if (!IsValidPlayer(ci->client_playas)) { - packet.Send_bool (true); - packet.Send_string(ci->client_name); - packet.Send_string(ci->unique_id); - packet.Send_uint32(ci->join_date); + for (int i = 0; i < NETWORK_STATION_TYPES; i++) { + packet.Send_uint16(_network_player_info[player->index].num_station[i]); } } - /* Also check for the server itself */ - ci = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX); - if (!IsValidPlayer(ci->client_playas)) { - packet.Send_bool (true); - packet.Send_string(ci->client_name); - packet.Send_string(ci->unique_id); - packet.Send_uint32(ci->join_date); - } - - /* Indicates end of client list */ - packet.Send_bool(false); - this->SendPacket(&packet, client_addr); }