From e4f8d32a7276cb0b0de735d35abdaa3227f9c2bc Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 4 May 2022 08:26:03 +0200 Subject: [PATCH] Don't crash on corrupt animated images --- src/ui/MxcAnimatedImage.cpp | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/ui/MxcAnimatedImage.cpp b/src/ui/MxcAnimatedImage.cpp index 2f3af137..4af527b4 100644 --- a/src/ui/MxcAnimatedImage.cpp +++ b/src/ui/MxcAnimatedImage.cpp @@ -70,22 +70,27 @@ MxcAnimatedImage::startDownload() if (!self) return; - if (buffer.isOpen()) { - movie.stop(); - movie.setDevice(nullptr); - buffer.close(); - } + try { + if (buffer.isOpen()) { + movie.stop(); + movie.setDevice(nullptr); + buffer.close(); + } - if (encryptionInfo) { - QByteArray ba = device.readAll(); - std::string temp(ba.constData(), ba.size()); - temp = mtx::crypto::to_string(mtx::crypto::decrypt_file(temp, encryptionInfo.value())); - buffer.setData(temp.data(), temp.size()); - } else { - buffer.setData(device.readAll()); + if (encryptionInfo) { + QByteArray ba = device.readAll(); + std::string temp(ba.constData(), ba.size()); + temp = + mtx::crypto::to_string(mtx::crypto::decrypt_file(temp, encryptionInfo.value())); + buffer.setData(temp.data(), temp.size()); + } else { + buffer.setData(device.readAll()); + } + buffer.open(QIODevice::ReadOnly); + buffer.reset(); + } catch (const std::exception &e) { + nhlog::net()->error("Failed to setup animated image buffer: {}", e.what()); } - buffer.open(QIODevice::ReadOnly); - buffer.reset(); QTimer::singleShot(0, this, [this, mimeType] { nhlog::ui()->info(