Просмотр исходного кода

fix bulk upload of empty files

force an empty body when we bulk upload empty files

force a "valid" checksum to be computed for empty files as bulk upload
server side expects a checksum even for empty files

Close #5824

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
Matthieu Gallien 2 лет назад
Родитель
Сommit
f37bda0e48
2 измененных файлов с 11 добавлено и 19 удалено
  1. 6 18
      src/common/checksumcalculator.cpp
  2. 5 1
      src/libsync/putmultifilejob.cpp

+ 6 - 18
src/common/checksumcalculator.cpp

@@ -95,8 +95,6 @@ QByteArray ChecksumCalculator::calculate()
         return result;
     }
 
-    bool isAnyChunkAdded = false;
-
     for (;;) {
         QMutexLocker locker(&_deviceMutex);
         if (!_device->isOpen() || _device->atEnd()) {
@@ -114,7 +112,6 @@ QByteArray ChecksumCalculator::calculate()
         if (!addChunk(buf, sizeRead)) {
             break;
         }
-        isAnyChunkAdded = true;
     }
 
     {
@@ -124,14 +121,12 @@ QByteArray ChecksumCalculator::calculate()
         }
     }
 
-    if (isAnyChunkAdded) {
-        if (_algorithmType == AlgorithmType::Adler32) {
-            result = QByteArray::number(_adlerHash, 16);
-        } else {
-            Q_ASSERT(_cryptographicHash);
-            if (_cryptographicHash) {
-                result = _cryptographicHash->result().toHex();
-            }
+    if (_algorithmType == AlgorithmType::Adler32) {
+        result = QByteArray::number(_adlerHash, 16);
+    } else {
+        Q_ASSERT(_cryptographicHash);
+        if (_cryptographicHash) {
+            result = _cryptographicHash->result().toHex();
         }
     }
 
@@ -152,13 +147,6 @@ void ChecksumCalculator::initChecksumAlgorithm()
         return;
     }
 
-    {
-        QMutexLocker locker(&_deviceMutex);
-        if (_device->size() == 0) {
-            return;
-        }
-    }
-
     if (_algorithmType == AlgorithmType::Adler32) {
         _adlerHash = adler32(0L, Z_NULL, 0);
     } else {

+ 5 - 1
src/libsync/putmultifilejob.cpp

@@ -53,7 +53,11 @@ void PutMultiFileJob::start()
 
         auto onePart = QHttpPart{};
 
-        onePart.setBodyDevice(oneDevice._device.get());
+        if (oneDevice._device->size() == 0) {
+            onePart.setBody({});
+        } else {
+            onePart.setBodyDevice(oneDevice._device.get());
+        }
 
         for (auto it = oneDevice._headers.begin(); it != oneDevice._headers.end(); ++it) {
             onePart.setRawHeader(it.key(), it.value());