From: Matthieu Gallien Date: Tue, 7 Dec 2021 14:06:52 +0000 (+0100) Subject: prevent cases where desktop client would store invalid modified time X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~17^2~253^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=41c86d645994849b9732becff40cd2b90ad55ff6;p=nextcloud-desktop.git prevent cases where desktop client would store invalid modified time Signed-off-by: Matthieu Gallien --- diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index f33f309d6..38caf0e3c 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 a34d22382..ada1c46a4 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 614949ce5..ce3a64e3e 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