diff options
author | Jens Bache-Wiig <jbache@trolltech.com> | 2010-04-01 12:57:21 (GMT) |
---|---|---|
committer | Jens Bache-Wiig <jbache@trolltech.com> | 2010-04-01 13:03:17 (GMT) |
commit | 3e287de62f677dd0a88d2fa9299059025f2db546 (patch) | |
tree | 27039d17ca558e5d0899d5376aaf01786dcbca32 /src | |
parent | 9a2ad0cf5724e40f6e401f94904563d14a152f95 (diff) | |
download | Qt-3e287de62f677dd0a88d2fa9299059025f2db546.zip Qt-3e287de62f677dd0a88d2fa9299059025f2db546.tar.gz Qt-3e287de62f677dd0a88d2fa9299059025f2db546.tar.bz2 |
Fix crash in the fileiconprovider for Windows
In some cases the fileiconprovider has been reported to crash
while accessing icons with overlays. This situation got
worse with change b67bd25be08b54c3e6e49b2b9429e54ff58db268
since these cases were often hidden by broken caching.
The workaround for now is to simply check that the hIcon structure
is non empty before converting the icon.
Task-number: QTBUG-8324
Reviewed-by: ogoffart
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/itemviews/qfileiconprovider.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/gui/itemviews/qfileiconprovider.cpp b/src/gui/itemviews/qfileiconprovider.cpp index fcc61e5..673065c 100644 --- a/src/gui/itemviews/qfileiconprovider.cpp +++ b/src/gui/itemviews/qfileiconprovider.cpp @@ -254,7 +254,9 @@ QIcon QFileIconProviderPrivate::getWinIcon(const QFileInfo &fileInfo) const val = SHGetFileInfo((const wchar_t *)QDir::toNativeSeparators(fileInfo.filePath()).utf16(), 0, &info, sizeof(SHFILEINFO), SHGFI_SMALLICON|SHGFI_SYSICONINDEX); #endif - if (val) { + + // Even if GetFileInfo returns a valid result, hIcon can be empty in some cases + if (val && info.hIcon) { if (fileInfo.isDir() && !fileInfo.isRoot()) { //using the unique icon index provided by windows save us from duplicate keys key = QString::fromLatin1("qt_dir_%1").arg(info.iIcon); @@ -293,7 +295,7 @@ QIcon QFileIconProviderPrivate::getWinIcon(const QFileInfo &fileInfo) const val = SHGetFileInfo((const wchar_t *)QDir::toNativeSeparators(fileInfo.filePath()).utf16(), 0, &info, sizeof(SHFILEINFO), SHGFI_LARGEICON|SHGFI_SYSICONINDEX); #endif - if (val) { + if (val && info.hIcon) { if (fileInfo.isDir() && !fileInfo.isRoot()) { //using the unique icon index provided by windows save us from duplicate keys key = QString::fromLatin1("qt_dir_%1").arg(info.iIcon); |