Details
-
Bug
-
Resolution: Done
-
P4: Low
-
4.8.x, 5.5.0
-
None
-
494ced13292fa9d7b572f5310090f6b8fab36e26
Description
Create a QFileInfo of a file with timestamp before january 1970 then the timestamp returned by QFileInfo.lastModified() or by QFileInfo.created() is wrong.
See qfilesystemmetadata_p.h in either src/corelib/io or 5.5.0/QtCore/private and find the 3 lines:
inline QDateTime QFileSystemMetaData::creationTime() const { return QDateTime::fromTime_t(creationTime_); } inline QDateTime QFileSystemMetaData::modificationTime() const { return QDateTime::fromTime_t(modificationTime_); } inline QDateTime QFileSystemMetaData::accessTime() const { return QDateTime::fromTime_t(accessTime_); }
The variables creationTime_, accessTime_, modificationTime_ are signed, however the argument in QDateTime::fromTime_t(uint) is unsigned.
A possible solution is to replace QDateTime::fromTime_t(uint) with QDateTime::fromTime_t(0).addSecs(qint64)
Thus, a solution is to replace the 3 lines above with:
inline QDateTime QFileSystemMetaData::creationTime() const { return QDateTime::fromTime_t(0).addSecs(creationTime_); } inline QDateTime QFileSystemMetaData::modificationTime() const { return QDateTime::fromTime_t(0).addSecs(modificationTime_); } inline QDateTime QFileSystemMetaData::accessTime() const { return QDateTime::fromTime_t(0).addSecs(accessTime_); }