changeset 890:0d0e9e609c71 draft

(svn r1376) fixed an issue where a modified client could try to replace a vehicle to an invalid engine ID and crash the server. Now the server just rejects the request. Also added a check for vehicle ownership, so you should not be able to replace other player's vehicles
author bjarni <bjarni@openttd.org>
date Tue, 04 Jan 2005 17:54:16 +0000
parents 8a7301b5aa5b
children 89096b98b68d
files vehicle.c
diffstat 1 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/vehicle.c
+++ b/vehicle.c
@@ -1415,8 +1415,18 @@
 
 	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
 	
+	
+	// first we make sure that it's a valid type the user requested
+	// check that it's an engine that is in the engine array
+	if (new_engine_type >= TOTAL_NUM_ENGINES ) return CMD_ERROR;
+	
+	// check that the new vehicle type is the same as the original one
 	if (v->type != _engines[new_engine_type].type) return CMD_ERROR;
 
+	// check that it's the vehicle's owner that requested the replace
+	if (!CheckOwnership(v->owner)) return CMD_ERROR;
+
+
 	switch (v->type) {
 		case VEH_Train:    build_cost = EstimateTrainCost(RailVehInfo(new_engine_type)); break;
 		case VEH_Road:     build_cost = EstimateRoadVehCost(new_engine_type);            break;