From 75800ce49fca611df7a86c83a8da3b581a446aff Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Sat, 23 Jul 2022 13:17:33 +0100 Subject: [PATCH] Fix memory leak in RideFile::append and friends .. data point allocated twice on heap in appendOrUpdatePoint which is always called by RideFile::append .. this leak has been present since v3.4 (!) Fixes #4248 --- src/FileIO/RideFile.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/FileIO/RideFile.cpp b/src/FileIO/RideFile.cpp index 0c5b20361..a97c2c298 100644 --- a/src/FileIO/RideFile.cpp +++ b/src/FileIO/RideFile.cpp @@ -1506,7 +1506,9 @@ void RideFile::appendOrUpdatePoint(double secs, double cad, double hr, double km rvert, rcad, rcontact, tcore, interval); + if (!forceAppend) { + int idx = timeIndex(secs); if (idx != -1) { if (dataPoints_.at(idx)->secs == secs) { @@ -1519,21 +1521,10 @@ void RideFile::appendOrUpdatePoint(double secs, double cad, double hr, double km dataPoints_.insert(idx+1, point); } } else - forceAppend = true; + forceAppend = true; // note if clause below } - if (forceAppend) { - RideFilePoint* point = new RideFilePoint(secs, cad, hr, km, kph, nm, watts, alt, lon, lat, - headwind, slope, temp, - lrbalance, - lte, rte, lps, rps, - lpco, rpco, - lppb, rppb, lppe, rppe, - lpppb, rpppb, lpppe, rpppe, - smo2, thb, - rvert, rcad, rcontact, tcore, - interval); - + if (forceAppend) { // note forceAppend = true above do not convert to else clause dataPoints_.append(point); }