ensure any errors after calling FileSystem::getModTime are handled
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Thu, 16 Dec 2021 14:28:46 +0000 (15:28 +0100)
committerMatthieu Gallien <matthieu.gallien@nextcloud.com>
Thu, 16 Dec 2021 14:28:46 +0000 (15:28 +0100)
be sure that even in release mode no errors when calling getModTime
could be ignored

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/libsync/bulkpropagatorjob.cpp
src/libsync/owncloudpropagator.cpp
src/libsync/propagatedownload.cpp
src/libsync/propagateupload.cpp

index 269a0e6c3eea79dcd2a3b03837b872b805fec49d..506d2989fb61e29a547d8dac7a90923b6d79a4c7 100644 (file)
@@ -164,6 +164,12 @@ void BulkPropagatorJob::doStartUpload(SyncFileItemPtr item,
         fileToUpload._file = item->_file = item->_renameTarget;
         fileToUpload._path = propagator()->fullLocalPath(fileToUpload._file);
         item->_modtime = FileSystem::getModTime(newFilePathAbsolute);
+        if (item->_modtime <= 0) {
+            _pendingChecksumFiles.remove(item->_file);
+            slotOnErrorStartFolderUnlock(item, SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(item->_file)));
+            checkPropagationIsDone();
+            return;
+        }
     }
 
     const auto remotePath = propagator()->fullRemotePath(fileToUpload._file);
index 38caf0e3c0479db5d09e60b2e1811159ad1535b7..3f13e42c4ed967bccf2fc772c90cd4c2f5cc46a1 100644 (file)
@@ -772,6 +772,10 @@ bool OwncloudPropagator::createConflict(const SyncFileItemPtr &item,
 
     QString renameError;
     auto conflictModTime = FileSystem::getModTime(fn);
+    if (conflictModTime <= 0) {
+        *error = tr("Impossible to get modification time for file in conflict %1)").arg(fn);
+        return false;
+    }
     QString conflictUserName;
     if (account()->capabilities().uploadConflictFiles())
         conflictUserName = account()->davDisplayName();
index c7f8ff5bf3198181295bdf12abb4a3b0ffb1c6ab..93a204d34a292d065f755b2660a727adb4355088 100644 (file)
@@ -599,6 +599,7 @@ void PropagateDownloadFile::conflictChecksumComputed(const QByteArray &checksumT
         Q_ASSERT(_item->_modtime > 0);
         if (_item->_modtime <= 0) {
             qCWarning(lcPropagateDownload()) << "invalid modified time" << _item->_file << _item->_modtime;
+            return;
         }
         if (_item->_modtime != _item->_previousModtime) {
             Q_ASSERT(_item->_modtime > 0);
@@ -609,6 +610,7 @@ void PropagateDownloadFile::conflictChecksumComputed(const QByteArray &checksumT
         Q_ASSERT(_item->_modtime > 0);
         if (_item->_modtime <= 0) {
             qCWarning(lcPropagateDownload()) << "invalid modified time" << _item->_file << _item->_modtime;
+            return;
         }
         updateMetadata(/*isConflict=*/false);
         return;
index b655cfdfb545a276d024b40e84cb1b032e97e530..9202d658bf2327cc34e4f25f3afdae4ec307e2e8 100644 (file)
@@ -213,6 +213,8 @@ void PropagateUploadFileCommon::start()
         Q_ASSERT(_item->_modtime > 0);
         if (_item->_modtime <= 0) {
             qCWarning(lcPropagateUpload()) << "invalid modified time" << _item->_file << _item->_modtime;
+            slotOnErrorStartFolderUnlock(SyncFileItem::NormalError, tr("File %1 has invalid modified time. Do not upload to the server.").arg(QDir::toNativeSeparators(_item->_file)));
+            return;
         }
     }