1
0
mirror of https://github.com/d47081/qBittorrent.git synced 2025-02-05 03:14:44 +00:00

Avoid allocating large memory when loading a .torrent file

`QIODevice::read(qint64 maxSize)` will allocate full `maxSize` of memory no matter
what the real file size was, this caused users to experience out-of-memory
exception on 32-bit qbt.
Also handle the OOM execption if it still fails.

Closes #9064, #9075, #9130, #9239, #9246, #9279.
This commit is contained in:
Couchy 2018-08-03 23:20:01 -04:00 committed by Chocobo1
parent e59841d35c
commit 3808b5df16
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C

View File

@ -112,10 +112,18 @@ TorrentInfo TorrentInfo::loadFromFile(const QString &path, QString *error) noexc
return TorrentInfo();
}
const QByteArray data = file.read(fileSizeLimit);
QByteArray data;
try {
data = file.readAll();
}
catch (const std::bad_alloc &e) {
if (error)
*error = tr("Torrent file read error: %1").arg(e.what());
return TorrentInfo();
}
if (data.size() != file.size()) {
if (error)
*error = tr("Torrent file read error");
*error = tr("Torrent file read error: size mismatch");
return TorrentInfo();
}