diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index f33f309d63..38caf0e3c0 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -1126,6 +1126,13 @@ void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status) if (_item->_instruction == CSYNC_INSTRUCTION_NEW && _item->_direction == SyncFileItem::Down) { // special case for local MKDIR, set local directory mtime // (it's not synced later at all, but can be nice to have it set initially) + + if (_item->_modtime <= 0) { + status = _item->_status = SyncFileItem::NormalError; + _item->_errorString = tr("Error updating metadata due to invalid modified time"); + qCWarning(lcDirectory) << "Error writing to the database for file" << _item->_file; + } + FileSystem::setModTime(propagator()->fullLocalPath(_item->destination()), _item->_modtime); } diff --git a/src/libsync/vfs/suffix/vfs_suffix.cpp b/src/libsync/vfs/suffix/vfs_suffix.cpp index a34d223823..ada1c46a44 100644 --- a/src/libsync/vfs/suffix/vfs_suffix.cpp +++ b/src/libsync/vfs/suffix/vfs_suffix.cpp @@ -68,12 +68,20 @@ bool VfsSuffix::isHydrating() const Result VfsSuffix::updateMetadata(const QString &filePath, time_t modtime, qint64, const QByteArray &) { + if (modtime <= 0) { + return {tr("Error updating metadata due to invalid modified time")}; + } + FileSystem::setModTime(filePath, modtime); return {}; } Result VfsSuffix::createPlaceholder(const SyncFileItem &item) { + if (item._modtime <= 0) { + return {tr("Error updating metadata due to invalid modified time")}; + } + // The concrete shape of the placeholder is also used in isDehydratedPlaceholder() below QString fn = _setupParams.filesystemPath + item._file; if (!fn.endsWith(fileSuffix())) { diff --git a/src/libsync/vfs/xattr/vfs_xattr.cpp b/src/libsync/vfs/xattr/vfs_xattr.cpp index 614949ce50..ce3a64e3e2 100644 --- a/src/libsync/vfs/xattr/vfs_xattr.cpp +++ b/src/libsync/vfs/xattr/vfs_xattr.cpp @@ -69,12 +69,20 @@ bool VfsXAttr::isHydrating() const Result VfsXAttr::updateMetadata(const QString &filePath, time_t modtime, qint64, const QByteArray &) { + if (modtime <= 0) { + return {tr("Error updating metadata due to invalid modified time")}; + } + FileSystem::setModTime(filePath, modtime); return {}; } Result VfsXAttr::createPlaceholder(const SyncFileItem &item) { + if (item._modtime <= 0) { + return {tr("Error updating metadata due to invalid modified time")}; + } + const auto path = QString(_setupParams.filesystemPath + item._file); QFile file(path); if (file.exists() && file.size() > 1