Skip to content

Commit f69d18d

Browse files
authored
prevent partial updates from invalid trailer
by fixing the code order in updateFromDriverSync, moving pure validations first
1 parent 3996879 commit f69d18d

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

Server/Components/Vehicles/vehicle.cpp

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,13 @@ bool Vehicle::updateFromDriverSync(const VehicleDriverSyncPacket& vehicleSync, I
164164
return false;
165165
}
166166

167+
if (vehicleSync.TrailerID && trailer && trailer->getID() != vehicleSync.TrailerID)
168+
{
169+
// The client instantly jumped from one trailer to another one. Probably a cheat, so don't
170+
// allow it.
171+
return false;
172+
}
173+
167174
pos = vehicleSync.Position;
168175
rot = vehicleSync.Rotation;
169176
velocity = vehicleSync.Velocity;
@@ -218,16 +225,7 @@ bool Vehicle::updateFromDriverSync(const VehicleDriverSyncPacket& vehicleSync, I
218225

219226
if (vehicleSync.TrailerID)
220227
{
221-
if (trailer)
222-
{
223-
if (trailer->getID() != vehicleSync.TrailerID)
224-
{
225-
// The client instantly jumped from one trailer to another one. Probably a cheat, so don't
226-
// allow it.
227-
return false;
228-
}
229-
}
230-
else
228+
if (!trailer)
231229
{
232230
// Got a new one that we didn't know about.
233231
trailer = static_cast<Vehicle*>(pool->get(vehicleSync.TrailerID));
@@ -322,19 +320,19 @@ bool Vehicle::updateFromTrailerSync(const VehicleTrailerSyncPacket& trailerSync,
322320
return false;
323321
}
324322

323+
PlayerVehicleData* playerData = queryExtension<PlayerVehicleData>(player);
324+
if (!playerData)
325+
{
326+
return false;
327+
}
328+
325329
pos = trailerSync.Position;
326330
velocity = trailerSync.Velocity;
327331
angularVelocity = trailerSync.TurnVelocity;
328332
rot.q = glm::quat(trailerSync.Quat[0], trailerSync.Quat[1], trailerSync.Quat[2], trailerSync.Quat[3]);
329333

330334
updateOccupied();
331335

332-
PlayerVehicleData* playerData = queryExtension<PlayerVehicleData>(player);
333-
if (!playerData)
334-
{
335-
return false;
336-
}
337-
338336
Vehicle* vehicle = static_cast<Vehicle*>(playerData->getVehicle());
339337

340338
if (!vehicle || vehicle->detaching)

0 commit comments

Comments
 (0)