diff options
-rw-r--r-- | src/corelib/io/qfilesystemengine_win.cpp | 7 | ||||
-rw-r--r-- | tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp | 7 |
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 |