From e1789af3378c83f78695ca828ea6d0315860cc11 Mon Sep 17 00:00:00 2001 From: Ben Wagner Date: Wed, 25 Jul 2018 15:20:25 -0400 Subject: Don't double check in SkArenaAlloc. Currently many range checks are being forced when they aren't needed. Change-Id: I5ad6933a15fa063e76045757c7523f17900e4c1a Reviewed-on: https://skia-review.googlesource.com/142816 Reviewed-by: Mike Klein Commit-Queue: Ben Wagner --- include/private/SkArenaAlloc.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/private/SkArenaAlloc.h b/include/private/SkArenaAlloc.h index 1915f8f9be..f39ebee208 100644 --- a/include/private/SkArenaAlloc.h +++ b/include/private/SkArenaAlloc.h @@ -8,6 +8,8 @@ #ifndef SkArenaAlloc_DEFINED #define SkArenaAlloc_DEFINED +#include "../private/SkTFitsIn.h" + #include #include #include @@ -98,6 +100,7 @@ public: template T* makeArrayDefault(size_t count) { + AssertRelease(SkTFitsIn(count)); uint32_t safeCount = ToU32(count); T* array = (T*)this->commonArrayAlloc(safeCount); @@ -110,6 +113,7 @@ public: template T* makeArray(size_t count) { + AssertRelease(SkTFitsIn(count)); uint32_t safeCount = ToU32(count); T* array = (T*)this->commonArrayAlloc(safeCount); @@ -123,6 +127,7 @@ public: // Only use makeBytesAlignedTo if none of the typed variants are impractical to use. void* makeBytesAlignedTo(size_t size, size_t align) { + AssertRelease(SkTFitsIn(size)); auto objStart = this->allocObject(ToU32(size), ToU32(align)); fCursor = objStart + size; return objStart; @@ -134,9 +139,7 @@ public: private: static void AssertRelease(bool cond) { if (!cond) { ::abort(); } } static uint32_t ToU32(size_t v) { -#if SIZE_MAX > 0xffffffff - AssertRelease(v <= 0xffffffff); -#endif + assert(SkTFitsIn(v)); return (uint32_t)v; } -- cgit v1.2.3