summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qfilesystemwatcher_win.cpp
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2021-09-22 11:47:22 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-09-23 14:57:04 +0000
commitfc6eb0bb7ef6b68508633eb7a4aa6193fe29a833 (patch)
tree57974dfc4e60b8f94aa0a14ad2d49d23744ee3c5 /src/corelib/io/qfilesystemwatcher_win.cpp
parentacaf38cfe4e2ef19f7318d5476aa7bee7a487e80 (diff)
QFileSystemWatcher: fix QWindowsFileSystemWatcherEngine crashes
Since QHash in Qt6 does not guarantee stable iterators after an insert it crashed from time to time. - possible crash at the erase call if pit is invalid - possible crash at insert if pit is invalid QHash<QString, int> myHash; auto i = myHash.find("foo"); myHash.insert("foo", 789); i.value(); // possible crash myHash.erase(i); // possible crash Task-number: QTBUG-96790 Change-Id: Ia9b53d46b8d1fef81ab5a130c229bc9e936f6521 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit e60951eef4f0ade944e2f93ffe2f44abfc76d97a) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/corelib/io/qfilesystemwatcher_win.cpp')
-rw-r--r--src/corelib/io/qfilesystemwatcher_win.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/corelib/io/qfilesystemwatcher_win.cpp b/src/corelib/io/qfilesystemwatcher_win.cpp
index 31c6b747a7..5d8a5b3682 100644
--- a/src/corelib/io/qfilesystemwatcher_win.cpp
+++ b/src/corelib/io/qfilesystemwatcher_win.cpp
@@ -430,8 +430,9 @@ QStringList QWindowsFileSystemWatcherEngine::addPaths(const QStringList &paths,
FindCloseChangeNotification(hit.value().handle);
thread->handles[index] = hit.value().handle = fileHandle;
hit.value().flags = flags;
- thread->pathInfoForHandle.insert(fileHandle, pit.value());
+ auto value = std::move(*pit);
thread->pathInfoForHandle.erase(pit);
+ thread->pathInfoForHandle.insert(fileHandle, std::move(value));
}
}
// In addition, check on flags for sufficient notification attributes