X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/5c19dc3ae3bd8e40a9c028b0deddd50ff337692c..dd5fb164cf5b32c462296bc65e289e100f74b59a:/OSX/libsecurity_utilities/lib/alloc.h diff --git a/OSX/libsecurity_utilities/lib/alloc.h b/OSX/libsecurity_utilities/lib/alloc.h index 83403e01..411b58cb 100644 --- a/OSX/libsecurity_utilities/lib/alloc.h +++ b/OSX/libsecurity_utilities/lib/alloc.h @@ -74,8 +74,13 @@ public: // All right, if you *really* have to have calloc... void *calloc(size_t size, size_t count) throw(std::bad_alloc) { - void *addr = malloc(size * count); - memset(addr, 0, size * count); + size_t bytes = 0; + if(__builtin_mul_overflow(size, count, &bytes)) { + // Multiplication overflowed. + throw std::bad_alloc(); + } + void *addr = malloc(bytes); + memset(addr, 0, bytes); return addr; }