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>
This commit is contained in:
Matthieu Gallien 2023-07-07 11:18:46 +02:00 коммит произвёл Matthieu Gallien
Родитель 0bb0491a9d
Коммит 8cd1a30c40
2 изменённых файлов: 11 добавлений и 19 удалений

Просмотреть файл

@ -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 {

Просмотреть файл

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