Four one-two line patches that fixes: * memory leak. * zero returned struct uninitialized members * adds bounds check * fix calloc() parameter order
br, Boris..
From ca906466d93dfa290d187a787144ab29b3793e56 Mon Sep 17 00:00:00 2001 From: Boris Barbulovski <[email protected]> Date: Mon, 10 Feb 2014 15:42:09 +0100 Subject: [PATCH 1/4] memory leak fix(that I created in some previous commits). Signed-off-by: Boris Barbulovski <[email protected]> --- qt-ui/profile/profilewidget2.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index 0f38e5f..7db9088 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -163,7 +163,6 @@ void ProfileWidget2::setupItemOnScene() setupItem(diveProfileItem, timeAxis, profileYAxis, dataModel, DivePlotDataModel::DEPTH, DivePlotDataModel::TIME, 0); #define CREATE_PP_GAS( ITEM, VERTICAL_COLUMN, COLOR, COLOR_ALERT, THRESHOULD_SETTINGS, VISIBILITY_SETTINGS ) \ - ITEM = new PartialPressureGasItem(); \ setupItem(ITEM, timeAxis, gasYAxis, dataModel, DivePlotDataModel::VERTICAL_COLUMN, DivePlotDataModel::TIME, 0); \ ITEM->setThreshouldSettingsKey(THRESHOULD_SETTINGS); \ ITEM->setVisibilitySettingsKey(VISIBILITY_SETTINGS); \ -- 1.8.3.2
From 23aab0c2ad9cd0857cb3ac04e3bcdec25b64049f Mon Sep 17 00:00:00 2001 From: Boris Barbulovski <[email protected]> Date: Mon, 10 Feb 2014 15:50:45 +0100 Subject: [PATCH 2/4] fix plot_info calculate_max_limits_new() function return value The return value(structure) was not fully initialized, thus random data returned for uninitialized members possibly making app into random bahaveour. Signed-off-by: Boris Barbulovski <[email protected]> --- profile.c | 1 + 1 file changed, 1 insertion(+) diff --git a/profile.c b/profile.c index f947b9d..a7e8078 100644 --- a/profile.c +++ b/profile.c @@ -769,6 +769,7 @@ struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer if (minpressure > maxpressure) minpressure = 0; + memset(&pi, 0, sizeof(pi)); pi.maxdepth = maxdepth; pi.maxtime = maxtime; pi.maxpressure = maxpressure; -- 1.8.3.2
From b5d3a0a69d0905062c6dfd4ee9061264a63df4cd Mon Sep 17 00:00:00 2001 From: Boris Barbulovski <[email protected]> Date: Mon, 10 Feb 2014 15:59:28 +0100 Subject: [PATCH 3/4] Improve sanity check for DivePlotDataModel::data() Adds DivePlotDataModel row upper-boundary check(isValid method already checks for negative values). Signed-off-by: Boris Barbulovski <[email protected]> --- qt-ui/profile/diveplotdatamodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qt-ui/profile/diveplotdatamodel.cpp b/qt-ui/profile/diveplotdatamodel.cpp index cb3b07c..2f81999 100644 --- a/qt-ui/profile/diveplotdatamodel.cpp +++ b/qt-ui/profile/diveplotdatamodel.cpp @@ -20,7 +20,7 @@ int DivePlotDataModel::columnCount(const QModelIndex& parent) const QVariant DivePlotDataModel::data(const QModelIndex& index, int role) const { - if (!index.isValid()) + if ((!index.isValid())||(index.row() >= pInfo.nr)) return QVariant(); plot_data item = pInfo.entry[index.row()]; -- 1.8.3.2
From 436c2571c1727da500d59085fc2333a0ad8d6d4b Mon Sep 17 00:00:00 2001 From: Boris Barbulovski <[email protected]> Date: Mon, 10 Feb 2014 16:04:37 +0100 Subject: [PATCH 4/4] Fix calloc parameter order. * Set correct calloc parameters order(num, size) Signed-off-by: Boris Barbulovski <[email protected]> --- divelist.c | 2 +- parse-xml.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/divelist.c b/divelist.c index e04807e..b16c9e5 100644 --- a/divelist.c +++ b/divelist.c @@ -665,7 +665,7 @@ void add_dive_to_trip(struct dive *dive, dive_trip_t *trip) dive_trip_t *create_and_hookup_trip_from_dive(struct dive *dive) { - dive_trip_t *dive_trip = calloc(sizeof(dive_trip_t),1); + dive_trip_t *dive_trip = calloc(1, sizeof(dive_trip_t)); dive_trip->when = dive->when; if (dive->location) dive_trip->location = strdup(dive->location); diff --git a/parse-xml.c b/parse-xml.c index 1d88ab6..15fe67b 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -1273,7 +1273,7 @@ static void trip_start(void) if (cur_trip) return; dive_end(); - cur_trip = calloc(sizeof(dive_trip_t),1); + cur_trip = calloc(1, sizeof(dive_trip_t)); memset(&cur_tm, 0, sizeof(cur_tm)); } -- 1.8.3.2
_______________________________________________ subsurface mailing list [email protected] http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface
