summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/io/qfileinfo.cpp9
-rw-r--r--src/corelib/io/qfilesystemengine_unix.cpp5
-rw-r--r--src/corelib/io/qfilesystemengine_win.cpp5
-rw-r--r--tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp10
4 files changed, 24 insertions, 5 deletions
diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp
index 3a67b7061f..b58c3d3032 100644
--- a/src/corelib/io/qfileinfo.cpp
+++ b/src/corelib/io/qfileinfo.cpp
@@ -1259,7 +1259,8 @@ QDateTime QFileInfo::created() const
return QDateTime();
if (d->fileEngine == 0) {
if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::CreationTime))
- QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::CreationTime);
+ if (!QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::CreationTime))
+ return QDateTime();
return d->metaData.creationTime();
}
return d->getFileTime(QAbstractFileEngine::CreationTime);
@@ -1277,7 +1278,8 @@ QDateTime QFileInfo::lastModified() const
return QDateTime();
if (d->fileEngine == 0) {
if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::ModificationTime))
- QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::ModificationTime);
+ if (!QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::ModificationTime))
+ return QDateTime();
return d->metaData.modificationTime();
}
return d->getFileTime(QAbstractFileEngine::ModificationTime);
@@ -1298,7 +1300,8 @@ QDateTime QFileInfo::lastRead() const
return QDateTime();
if (d->fileEngine == 0) {
if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::AccessTime))
- QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::AccessTime);
+ if (!QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::AccessTime))
+ return QDateTime();
return d->metaData.accessTime();
}
return d->getFileTime(QAbstractFileEngine::AccessTime);
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
index 3d75b8cb09..4c295b157c 100644
--- a/src/corelib/io/qfilesystemengine_unix.cpp
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
@@ -467,7 +467,10 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
data.knownFlagsMask |= QFileSystemMetaData::BundleType;
}
#endif
-
+ if (!entryExists) {
+ data.clearFlags(what);
+ return false;
+ }
return data.hasFlags(what);
}
diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp
index 6041edb252..ae8638ed5e 100644
--- a/src/corelib/io/qfilesystemengine_win.cpp
+++ b/src/corelib/io/qfilesystemengine_win.cpp
@@ -856,7 +856,10 @@ bool QFileSystemEngine::fillMetaData(const QFileSystemEntry &entry, QFileSystemM
data.fillFromFindData(findData, false, fname.isDriveRoot());
} else {
if (!tryFindFallback(fname, data))
- tryDriveUNCFallback(fname, data);
+ if (!tryDriveUNCFallback(fname, data)) {
+ SetErrorMode(oldmode);
+ return false;
+ }
}
SetErrorMode(oldmode);
}
diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
index df8b1dda1c..59a28e1df5 100644
--- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
+++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
@@ -189,6 +189,7 @@ private slots:
void group();
void invalidState();
+ void nonExistingFileDates();
};
void tst_QFileInfo::cleanupTestCase()
@@ -1819,5 +1820,14 @@ void tst_QFileInfo::invalidState()
QVERIFY(true);
}
+void tst_QFileInfo::nonExistingFileDates()
+{
+ QFileInfo info("non-existing-file.foobar");
+ QVERIFY(!info.exists());
+ QVERIFY(!info.created().isValid());
+ QVERIFY(!info.lastRead().isValid());
+ QVERIFY(!info.lastModified().isValid());
+}
+
QTEST_MAIN(tst_QFileInfo)
#include "tst_qfileinfo.moc"