summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2012-11-23 14:54:18 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-23 17:04:00 +0100
commit1022c3ce9d445fd482a62309b9a6c52495c04a92 (patch)
treecbe71442458f9cb00503845441a56850f2905c33
parentaea68c93ae437a761584719f0f1ca93eaf6f7484 (diff)
Do not detect directories ending in ".lnk" as link files.
Task-number: QTBUG-21863 Change-Id: I70b661fa5fcaba1293a80c971c506798826f5b23 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r--src/corelib/io/qfilesystemengine_win.cpp7
-rw-r--r--tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp7
2 files changed, 13 insertions, 1 deletions
diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp
index e4804329af..5364a44f91 100644
--- a/src/corelib/io/qfilesystemengine_win.cpp
+++ b/src/corelib/io/qfilesystemengine_win.cpp
@@ -822,6 +822,8 @@ bool QFileSystemEngine::fillMetaData(HANDLE fHandle, QFileSystemMetaData &data,
return data.hasFlags(what);
}
+static bool isDirPath(const QString &dirPath, bool *existed);
+
//static
bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemMetaData &data,
QFileSystemMetaData::MetaDataFlags what)
@@ -831,7 +833,10 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
QFileSystemEntry fname;
data.knownFlagsMask |= QFileSystemMetaData::WinLnkType;
- if(entry.filePath().endsWith(QLatin1String(".lnk"))) {
+ // Check for ".lnk": Directories named ".lnk" should be skipped, corrupted
+ // link files should still be detected as links.
+ const QString origFilePath = entry.filePath();
+ if (origFilePath.endsWith(QLatin1String(".lnk")) && !isDirPath(origFilePath, 0)) {
data.entryFlags |= QFileSystemMetaData::WinLnkType;
fname = QFileSystemEntry(readLink(entry));
} else {
diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
index 83545cc7e6..bc73620bf3 100644
--- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
+++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
@@ -1467,6 +1467,13 @@ void tst_QFileInfo::brokenShortcut()
QVERIFY(info.isSymLink());
QVERIFY(!info.exists());
QFile::remove(linkName);
+
+ QDir current; // QTBUG-21863
+ QVERIFY(current.mkdir(linkName));
+ QFileInfo dirInfo(linkName);
+ QVERIFY(!dirInfo.isSymLink());
+ QVERIFY(dirInfo.isDir());
+ current.rmdir(linkName);
}
#endif