# HG changeset patch # User fonsinchen # Date 2014-04-08 19:28:14 # Node ID 95eabab86f13f69276d0de27c5190f0092cf53cc # Parent 0c85f6f7d752482fa602f0b87584374d9e322d08 (svn r26448) -Fix [FS#5970]: Avoid division by 0 when scaling flow values. diff --git a/src/linkgraph/flowmapper.cpp b/src/linkgraph/flowmapper.cpp --- a/src/linkgraph/flowmapper.cpp +++ b/src/linkgraph/flowmapper.cpp @@ -49,8 +49,10 @@ void FlowMapper::Run(LinkGraphJob &job) FlowStatMap &flows = node.Flows(); flows.FinalizeLocalConsumption(node.Station()); if (this->scale) { - /* Scale by time the graph has been running without being compressed. */ - uint runtime = job.JoinDate() - job.Settings().recalc_time - job.LastCompression(); + /* Scale by time the graph has been running without being compressed. Add 1 to avoid + * division by 0 if spawn date == last compression date. This matches + * LinkGraph::Monthly(). */ + uint runtime = job.JoinDate() - job.Settings().recalc_time - job.LastCompression() + 1; for (FlowStatMap::iterator i = flows.begin(); i != flows.end(); ++i) { i->second.ScaleToMonthly(runtime); } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4314,9 +4314,11 @@ void FlowStat::ReleaseShare(StationID st /** * Scale all shares from link graph's runtime to monthly values. * @param runtime Time the link graph has been running without compression. + * @pre runtime must be greater than 0 as we don't want infinite flow values. */ void FlowStat::ScaleToMonthly(uint runtime) { + assert(runtime > 0); SharesMap new_shares; uint share = 0; for (SharesMap::iterator i = this->shares.begin(); i != this->shares.end(); ++i) {