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:
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. */
|
||||
|
||||
Reference in New Issue
Block a user