Mercurial > hg > openttd
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; }