From f18ea2e3b62f43358ea3f7f5b5ba74a351f7b088 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Sat, 10 Aug 2019 17:28:24 +0200 Subject: [PATCH] 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 --- qt-models/divelocationmodel.cpp | 7 +++++++ 1 file changed, 7 insertions(+) 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;