Fix: multiplication result converted to larger type

Technically unlikely to happen, though uint16 * uint16 get promoted to int and
then stored as uint64; similarly uint * uint16 remains uint and gets stored as
uint64. In both cases the value can get truncated before the change to uint64.

(cherry picked from commit 4a6fdc8293)
This commit is contained in:
Rubidium
2023-05-14 21:13:24 +02:00
committed by Jonathan G Rennison
parent d481d382cb
commit dd94b087c4

View File

@@ -337,7 +337,7 @@ void CargoList<Tinst, Tcont>::RemoveFromCache(const CargoPacket *cp, uint count)
{ {
dbg_assert(count <= cp->count); dbg_assert(count <= cp->count);
this->count -= count; this->count -= count;
this->cargo_days_in_transit -= cp->days_in_transit * count; this->cargo_days_in_transit -= static_cast<uint64_t>(cp->days_in_transit) * count;
} }
/** /**
@@ -349,7 +349,7 @@ template <class Tinst, class Tcont>
void CargoList<Tinst, Tcont>::AddToCache(const CargoPacket *cp) void CargoList<Tinst, Tcont>::AddToCache(const CargoPacket *cp)
{ {
this->count += cp->count; this->count += cp->count;
this->cargo_days_in_transit += cp->days_in_transit * cp->count; this->cargo_days_in_transit += static_cast<uint64_t>(cp->days_in_transit) * cp->count;
} }
/** Invalidates the cached data and rebuilds it. */ /** Invalidates the cached data and rebuilds it. */