changeset 20638:8b12b6fc3145 draft

(svn r25589) -Fix [FS#5646]: Ensure that sent and received length of json strings are the same (based on patch by Xaroth)
author planetmaker <planetmaker@openttd.org>
date Fri, 12 Jul 2013 17:11:16 +0000
parents 0612e3d379fa
children 24cf8677834c
files src/network/core/config.h src/network/network_admin.cpp
diffstat 2 files changed, 5 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/network/core/config.h
+++ b/src/network/core/config.h
@@ -48,7 +48,7 @@
 static const uint NETWORK_CLIENTS_LENGTH          =  200; ///< The maximum length for the list of clients that controls a company, in bytes including '\0'
 static const uint NETWORK_CLIENT_NAME_LENGTH      =   25; ///< The maximum length of a client's name, in bytes including '\0'
 static const uint NETWORK_RCONCOMMAND_LENGTH      =  500; ///< The maximum length of a rconsole command, in bytes including '\0'
-static const uint NETWORK_GAMESCRIPT_JSON_LENGTH  = 1450; ///< The maximum length of a gamescript json string, in bytes including '\0'
+static const uint NETWORK_GAMESCRIPT_JSON_LENGTH  = SEND_MTU - 3; ///< The maximum length of a gamescript json string, in bytes including '\0'. Must not be longer than SEND_MTU including header (3 bytes)
 static const uint NETWORK_CHAT_LENGTH             =  900; ///< The maximum length of a chat message, in bytes including '\0'
 
 static const uint NETWORK_GRF_NAME_LENGTH         =   80; ///< Maximum length of the name of a GRF
--- a/src/network/network_admin.cpp
+++ b/src/network/network_admin.cpp
@@ -579,10 +579,10 @@
  */
 NetworkRecvStatus ServerNetworkAdminSocketHandler::SendGameScript(const char *json)
 {
-	/* At the moment we cannot transmit anything larger than MTU. So the string
-	 *  has to be no longer than the length of the json + '\0' + 3 bytes of the
-	 *  packet header. */
-	if (strlen(json) + 1 + 3 >= SEND_MTU) return NETWORK_RECV_STATUS_OKAY;
+	/* At the moment we cannot transmit anything larger than MTU. So we limit
+	 *  the maximum amount of json data that can be sent. Account also for
+	 *  the trailing \0 of the string */
+	if (strlen(json) + 1 >= NETWORK_GAMESCRIPT_JSON_LENGTH) return NETWORK_RECV_STATUS_OKAY;
 
 	Packet *p = new Packet(ADMIN_PACKET_SERVER_GAMESCRIPT);