From 523a6a1cffd1a7567453835500f387f3499b10a2 Mon Sep 17 00:00:00 2001 From: truelight Date: Wed, 5 Jan 2005 14:39:48 +0000 Subject: (svn r1389) -Add: [Network] Added packet protection. No longer a client or server reads beyond the size of the packet -Fix: [Network] A server no longer crashes when a client sends an invalid DoCommand, but drops the client instead. --- command.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'command.c') diff --git a/command.c b/command.c index 6c0e0d7c9..cf4ac7944 100644 --- a/command.c +++ b/command.c @@ -312,6 +312,17 @@ static CommandProc * const _command_proc_table[] = { CmdReplaceVehicle, /* 114 */ }; +/* This function range-checks a cmd, and checks if the cmd is not NULL */ +bool IsValidCommand(int cmd) +{ + cmd = cmd & 0xFF; + + if (cmd < 0 || cmd >= lengthof(_command_proc_table) || _command_proc_table[cmd] == NULL) + return false; + + return true; +} + int32 DoCommandByTile(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint procc) { return DoCommand(GET_TILE_X(tile)*16, GET_TILE_Y(tile)*16, p1, p2, flags, procc); -- cgit v1.2.3-54-g00ecf