1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 21:57:35 +00:00

LibGfx: Use Checked<T> when creating new bitmaps

This commit is contained in:
Andreas Kling 2020-04-15 16:55:07 +02:00
parent 9c54bad241
commit f3fc294ac8

View file

@ -24,6 +24,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <AK/Checked.h>
#include <AK/Memory.h> #include <AK/Memory.h>
#include <AK/SharedBuffer.h> #include <AK/SharedBuffer.h>
#include <AK/String.h> #include <AK/String.h>
@ -42,13 +43,10 @@ static bool size_would_overflow(BitmapFormat format, const Size& size)
{ {
if (size.width() < 0 || size.height() < 0) if (size.width() < 0 || size.height() < 0)
return true; return true;
size_t bpp = Bitmap::bpp_for_format(format); Checked<size_t> size_in_bytes = static_cast<size_t>(size.width());
size_t result = 0; size_in_bytes *= size.height();
if (__builtin_mul_overflow((size_t)size.width(), (size_t)size.height(), &result)) size_in_bytes *= Bitmap::bpp_for_format(format);
return true; return size_in_bytes.has_overflow();
if (__builtin_mul_overflow(result, bpp, &result))
return true;
return false;
} }
RefPtr<Bitmap> Bitmap::create(BitmapFormat format, const Size& size) RefPtr<Bitmap> Bitmap::create(BitmapFormat format, const Size& size)