changeset 16951:b363297469db draft

(svn r21687) -Fix: verify the colour code we received from the server is valid
author smatz <smatz@openttd.org>
date Sat, 01 Jan 2011 17:02:29 +0000
parents 53b5779d2cfb
children f220788812ba
files src/console_type.h src/network/network_client.cpp
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/console_type.h
+++ b/src/console_type.h
@@ -30,4 +30,10 @@
 	CC_WHITE   = 12,
 };
 
+static inline bool IsValidConsoleColour(uint c)
+{
+	return c == CC_DEFAULT || c == CC_ERROR || c == CC_WARNING || c == CC_INFO ||
+			c == CC_DEBUG || c == CC_COMMAND || c == CC_WHITE;
+}
+
 #endif /* CONSOLE_TYPE_H */
--- a/src/network/network_client.cpp
+++ b/src/network/network_client.cpp
@@ -1067,12 +1067,13 @@
 {
 	if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
 
-	char rcon_out[NETWORK_RCONCOMMAND_LENGTH];
+	uint colour_code = p->Recv_uint16();
+	if (!IsValidConsoleColour(colour_code)) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
 
-	ConsoleColour colour_code = (ConsoleColour)p->Recv_uint16();
+	char rcon_out[NETWORK_RCONCOMMAND_LENGTH];
 	p->Recv_string(rcon_out, sizeof(rcon_out));
 
-	IConsolePrint(colour_code, rcon_out);
+	IConsolePrint((ConsoleColour)colour_code, rcon_out);
 
 	return NETWORK_RECV_STATUS_OKAY;
 }