summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-07-27 22:30:09 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-07-27 14:57:31 -0700
commitb0f1b258064bcbeb9cfc70dd4346dde5a90546ea (patch)
treedb874fcd28b9e2b0e021bf964d14bf4110a4e6ec
parenta0cd89f850d727f161eba19e0ee4b19e5aaf8f57 (diff)
downloadsubsurface-b0f1b258064bcbeb9cfc70dd4346dde5a90546ea.tar.gz
Crash fix: prevent crash in MapLocationModel::reload
Commit 0c387549164d7eec3ea6647c54ada2fba7f8d5e6 introduced a bug in MapLocationModel::reload() by setting an entry in the name-to-location map before the location was initialized. Move the setting of the map entry back where it was before: after the assignment of the location variable. Moreover, define the location variable directly on allocation of the location to avoid thus bugs in the future. Why did we not get a "might be used unitialized" warning anyway? Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r--CHANGELOG.md2
-rw-r--r--qt-models/maplocationmodel.cpp6
2 files changed, 4 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 64ec61ce5..1d6cc2dcb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-
+- fix crash when (re-)loading maps
---
* Always add new entries at the very top of this file above other existing entries and this note.
* Use this layout for new entries: `[Area]: [Details about the change] [reference thread / issue]`
diff --git a/qt-models/maplocationmodel.cpp b/qt-models/maplocationmodel.cpp
index b1fe16b60..1acea421e 100644
--- a/qt-models/maplocationmodel.cpp
+++ b/qt-models/maplocationmodel.cpp
@@ -140,7 +140,6 @@ void MapLocationModel::reload(QObject *map)
m_selectedDs.clear();
QMap<QString, MapLocation *> locationNameMap;
- MapLocation *location;
#ifdef SUBSURFACE_MOBILE
bool diveSiteMode = false;
@@ -184,10 +183,11 @@ void MapLocationModel::reload(QObject *map)
if (dsCoord.distanceTo(coord) < MIN_DISTANCE_BETWEEN_DIVE_SITES_M)
continue;
}
- locationNameMap[name] = location;
}
- location = new MapLocation(ds, dsCoord, name);
+ MapLocation *location = new MapLocation(ds, dsCoord, name);
m_mapLocations.append(location);
+ if (!diveSiteMode)
+ locationNameMap[name] = location;
}
endResetModel();