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)
pull/532/head
Rubidium 1 year ago committed by Jonathan G Rennison
parent d481d382cb
commit dd94b087c4

@ -337,7 +337,7 @@ void CargoList<Tinst, Tcont>::RemoveFromCache(const CargoPacket *cp, uint count)
{
dbg_assert(count <= cp->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)
{
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. */

Loading…
Cancel
Save