# HG changeset patch # User Darkvater # Date 1117464336 0 # Node ID e7318705dd04a6a13563d359d2dab925cfa3d862 # Parent 95c95857ec7bca41bef14f46edc55a553b80c27e (svn r2383) - Fix: Monkey-testing turned up some command crashes. diff -r 95c95857ec7b -r e7318705dd04 aircraft_cmd.c --- a/aircraft_cmd.c Mon May 30 13:35:39 2005 +0000 +++ b/aircraft_cmd.c Mon May 30 14:45:36 2005 +0000 @@ -170,7 +170,7 @@ Vehicle *vl[3], *v, *u, *w; UnitID unit_num; TileIndex tile = TILE_FROM_XY(x,y); - const AircraftVehicleInfo *avi = AircraftVehInfo(p1); + const AircraftVehicleInfo *avi; Engine *e; if (!IsEngineBuildable(p1, VEH_Aircraft)) return CMD_ERROR; @@ -186,6 +186,7 @@ if (flags & DC_QUERY_COST) return value; + avi = AircraftVehInfo(p1); // allocate 2 or 3 vehicle structs, depending on type if (!AllocateVehicles(vl, (avi->subtype & 1) == 0 ? 3 : 2) || IsOrderPoolFull()) diff -r 95c95857ec7b -r e7318705dd04 command.c --- a/command.c Mon May 30 13:35:39 2005 +0000 +++ b/command.c Mon May 30 14:45:36 2005 +0000 @@ -428,6 +428,10 @@ // get pointer to command handler assert((cmd & 0xFF) < lengthof(_command_proc_table)); proc = _command_proc_table[cmd & 0xFF].proc; + if (proc == NULL) { + _cmd_text = NULL; + return false; + } // Some commands have a different output in dryrun than the realrun // e.g.: if you demolish a whole town, the dryrun would say okay. diff -r 95c95857ec7b -r e7318705dd04 misc_cmd.c --- a/misc_cmd.c Mon May 30 13:35:39 2005 +0000 +++ b/misc_cmd.c Mon May 30 14:45:36 2005 +0000 @@ -256,7 +256,7 @@ */ int32 CmdChangeDifficultyLevel(int x, int y, uint32 flags, uint32 p1, uint32 p2) { - if ((int32)p1 >= GAME_DIFFICULTY_NUM && p1 != (uint32)-1L) return CMD_ERROR; + if (p1 != (uint32)-1L && ((int32)p1 >= GAME_DIFFICULTY_NUM || (int32)p1 < 0)) return CMD_ERROR; if (flags & DC_EXEC) { if (p1 != (uint32)-1L) { @@ -267,7 +267,7 @@ /* If we are a network-client, update the difficult setting (if it is open). * Use this instead of just dirtying the window because we need to load in - * the new difficulty settings */ + * the new difficulty settings */ if (_networking && !_network_server && FindWindowById(WC_GAME_OPTIONS, 0) != NULL) ShowGameDifficulty(); }