summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-08-10 17:28:24 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-08-10 09:55:11 -0700
commitf18ea2e3b62f43358ea3f7f5b5ba74a351f7b088 (patch)
tree1989e3874a06ad9c480ca19d7708e8aba44704ac
parent309a8c5b14a717cdc35ecb03aae2a57e59c0f922 (diff)
downloadsubsurface-f18ea2e3b62f43358ea3f7f5b5ba74a351f7b088.tar.gz
Location model: treat invalid indexes gracefully
There have been crash reports in DiveSiteSortedModel::allSiteNames(). The only conceivable reason that this crashes is that the core knows about more sites than the model and therefore on mapToSource() we get an invalid index, which is translated to -1. Accessing the name of that dive site will crash. Handle such invalid indexes gracefully. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r--qt-models/divelocationmodel.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/qt-models/divelocationmodel.cpp b/qt-models/divelocationmodel.cpp
index 3c03c27de..224dc1bea 100644
--- a/qt-models/divelocationmodel.cpp
+++ b/qt-models/divelocationmodel.cpp
@@ -227,6 +227,13 @@ QStringList DiveSiteSortedModel::allSiteNames() const
int num = rowCount();
for (int i = 0; i < num; i++) {
int idx = mapToSource(index(i, 0)).row();
+ // This shouldn't happen, but if model and core get out of sync,
+ // (more precisely: the core has more sites than the model is aware of),
+ // we might get an invalid index.
+ if (idx < 0 || idx > dive_site_table.nr) {
+ fprintf(stderr, "DiveSiteSortedModel::allSiteNames(): invalid index");
+ continue;
+ }
locationNames << QString(dive_site_table.dive_sites[idx]->name);
}
return locationNames;