[Backport release-9.x] Fix crash with low disk space (#3538)

This commit is contained in:
Alexandru Ionut Tripon 2025-03-24 19:04:38 +02:00 committed by GitHub
commit 57981a070f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 9 additions and 7 deletions

View File

@ -54,7 +54,7 @@ Task::State FileSink::init(QNetworkRequest& request)
return Task::State::Failed;
}
wroteAnyData = false;
m_wroteAnyData = false;
m_output_file.reset(new PSaveFile(m_filename));
if (!m_output_file->open(QIODevice::WriteOnly)) {
qCCritical(taskNetLogC) << "Could not open " + m_filename + " for writing";
@ -72,17 +72,19 @@ Task::State FileSink::write(QByteArray& data)
qCCritical(taskNetLogC) << "Failed writing into " + m_filename;
m_output_file->cancelWriting();
m_output_file.reset();
wroteAnyData = false;
m_wroteAnyData = false;
return Task::State::Failed;
}
wroteAnyData = true;
m_wroteAnyData = true;
return Task::State::Running;
}
Task::State FileSink::abort()
{
m_output_file->cancelWriting();
if (m_output_file) {
m_output_file->cancelWriting();
}
failAllValidators();
return Task::State::Failed;
}
@ -100,7 +102,7 @@ Task::State FileSink::finalize(QNetworkReply& reply)
// if we wrote any data to the save file, we try to commit the data to the real file.
// if it actually got a proper file, we write it even if it was empty
if (gotFile || wroteAnyData) {
if (gotFile || m_wroteAnyData) {
// ask validators for data consistency
// we only do this for actual downloads, not 'your data is still the same' cache hits
if (!finalizeAllValidators(reply))

View File

@ -58,7 +58,7 @@ class FileSink : public Sink {
protected:
QString m_filename;
bool wroteAnyData = false;
bool m_wroteAnyData = false;
std::unique_ptr<PSaveFile> m_output_file;
};
} // namespace Net

View File

@ -78,7 +78,7 @@ Task::State MetaCacheSink::finalizeCache(QNetworkReply& reply)
{
QFileInfo output_file_info(m_filename);
if (wroteAnyData) {
if (m_wroteAnyData) {
m_entry->setMD5Sum(m_md5Node->hash().toHex().constData());
}