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

Reply via email to