diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-07-27 22:30:09 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-07-27 14:57:31 -0700 |
commit | b0f1b258064bcbeb9cfc70dd4346dde5a90546ea (patch) | |
tree | db874fcd28b9e2b0e021bf964d14bf4110a4e6ec | |
parent | a0cd89f850d727f161eba19e0ee4b19e5aaf8f57 (diff) | |
download | subsurface-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.md | 2 | ||||
-rw-r--r-- | qt-models/maplocationmodel.cpp | 6 |
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(); |