[PATCH 2/2] Fix crash when removing an out-of-profile divepoints

Miika Turkia miika.turkia at gmail.com
Tue Feb 3 10:44:37 PST 2015


We can end up having a divepoint that is outside the dive profile. In
this case, we used to crash, but this hack prevents the index out of
range issue.

Fixes #784

Signed-off-by: Miika Turkia <miika.turkia at gmail.com>
---
 qt-ui/diveplanner.cpp | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index 67b84d0..84555bc 100644
--- a/qt-ui/diveplanner.cpp
+++ b/qt-ui/diveplanner.cpp
@@ -41,6 +41,16 @@ void DivePlannerPointsModel::removeSelectedPoints(const QVector<int> &rows)
 	int firstRow = rowCount() - rows.count();
 	QVector<int> v2 = rows;
 	std::sort(v2.begin(), v2.end(), intLessThan);
+
+	/*
+	 * If we end up having divepoints that are not within the dive
+	 * profile, we need to just skip the removal to prevent
+	 * crashing due to index out of range.
+	 */
+
+	if (rowCount() >= divepoints.count())
+		return;
+
 	beginRemoveRows(QModelIndex(), firstRow, rowCount() - 1);
 	for (int i = v2.count() - 1; i >= 0; i--) {
 		divepoints.remove(v2[i]);
-- 
1.9.1



More information about the subsurface mailing list