From ed6ef0b98e1d1f6ec13eac72b44b8f3aac6ce86a Mon Sep 17 00:00:00 2001 From: fourtf Date: Thu, 24 Jun 2021 22:54:36 +0200 Subject: [PATCH] add a maximum RAM usage for images --- src/messages/Image.cpp | 10 ++++++++++ src/messages/Image.hpp | 3 +++ 2 files changed, 13 insertions(+) diff --git a/src/messages/Image.cpp b/src/messages/Image.cpp index b306a2a1..9147bbea 100644 --- a/src/messages/Image.cpp +++ b/src/messages/Image.cpp @@ -405,6 +405,16 @@ void Image::actuallyLoad() QBuffer buffer(const_cast(&data)); buffer.open(QIODevice::ReadOnly); QImageReader reader(&buffer); + + if (reader.size().width() * reader.size().height() * + reader.imageCount() * 4 > + Image::maxBytesRam) + { + qCDebug(chatterinoImage) << "image too large in RAM"; + + return Failure; + } + auto parsed = detail::readFrames(reader, shared->url()); postToThread(makeConvertCallback(parsed, [weak](auto frames) { diff --git a/src/messages/Image.hpp b/src/messages/Image.hpp index 193ba578..a4ad674f 100644 --- a/src/messages/Image.hpp +++ b/src/messages/Image.hpp @@ -50,6 +50,9 @@ using ImagePtr = std::shared_ptr; class Image : public std::enable_shared_from_this, boost::noncopyable { public: + // Maximum amount of RAM used by the image in bytes. + static constexpr int maxBytesRam = 20 * 1024 * 1024; + ~Image(); static ImagePtr fromUrl(const Url &url, qreal scale = 1);