aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Miika Turkia <miika.turkia@gmail.com>2015-02-03 20:44:37 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-02-03 11:27:41 -0800
commit4f9705f3f54fc14d6b38123160f07015c41f3519 (patch)
tree329d14e08b7ba6a31ac5c638425b589b0f8099da
parent6f795a0059f5b1540d62bab30bc62422717420bb (diff)
downloadsubsurface-4f9705f3f5.tar.gz
Fix crash when removing an out-of-profile divepoints
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@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--qt-ui/diveplanner.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index 67b84d0bd..84555bcd6 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]);