diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2021-09-22 11:47:22 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-09-23 14:57:04 +0000 |
commit | fc6eb0bb7ef6b68508633eb7a4aa6193fe29a833 (patch) | |
tree | 57974dfc4e60b8f94aa0a14ad2d49d23744ee3c5 /src/corelib/io | |
parent | acaf38cfe4e2ef19f7318d5476aa7bee7a487e80 (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')
-rw-r--r-- | src/corelib/io/qfilesystemwatcher_win.cpp | 3 |
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 |