prevent cases where desktop client would store invalid modified time

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
This commit is contained in:
Matthieu Gallien 2021-12-07 15:06:52 +01:00 committed by Matthieu Gallien (Rebase PR Action)
parent b1977dfb18
commit 41c86d6459
3 changed files with 23 additions and 0 deletions

View file

@ -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);
}

View file

@ -68,12 +68,20 @@ bool VfsSuffix::isHydrating() const
Result<void, QString> 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<void, QString> 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())) {

View file

@ -69,12 +69,20 @@ bool VfsXAttr::isHydrating() const
Result<void, QString> 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<void, QString> 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