X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/5c19dc3ae3bd8e40a9c028b0deddd50ff337692c..HEAD:/OSX/libsecurity_cdsa_utilities/lib/cssmalloc.cpp diff --git a/OSX/libsecurity_cdsa_utilities/lib/cssmalloc.cpp b/OSX/libsecurity_cdsa_utilities/lib/cssmalloc.cpp index b2a47672..a7bb291c 100644 --- a/OSX/libsecurity_cdsa_utilities/lib/cssmalloc.cpp +++ b/OSX/libsecurity_cdsa_utilities/lib/cssmalloc.cpp @@ -30,6 +30,7 @@ #include #include #include +#include @@ -39,13 +40,13 @@ namespace Security { // // CssmMemoryFunctionsAllocators // -void *CssmMemoryFunctionsAllocator::malloc(size_t size) throw(std::bad_alloc) +void *CssmMemoryFunctionsAllocator::malloc(size_t size) { return functions.malloc(size); } -void CssmMemoryFunctionsAllocator::free(void *addr) throw() +void CssmMemoryFunctionsAllocator::free(void *addr) _NOEXCEPT { return functions.free(addr); } -void *CssmMemoryFunctionsAllocator::realloc(void *addr, size_t size) throw(std::bad_alloc) +void *CssmMemoryFunctionsAllocator::realloc(void *addr, size_t size) { return functions.realloc(addr, size); } @@ -61,20 +62,24 @@ CssmAllocatorMemoryFunctions::CssmAllocatorMemoryFunctions(Allocator &alloc) calloc_func = relayCalloc; } -void *CssmAllocatorMemoryFunctions::relayMalloc(size_t size, void *ref) throw(std::bad_alloc) +void *CssmAllocatorMemoryFunctions::relayMalloc(size_t size, void *ref) { return allocator(ref).malloc(size); } -void CssmAllocatorMemoryFunctions::relayFree(void *mem, void *ref) throw() +void CssmAllocatorMemoryFunctions::relayFree(void *mem, void *ref) _NOEXCEPT { allocator(ref).free(mem); } -void *CssmAllocatorMemoryFunctions::relayRealloc(void *mem, size_t size, void *ref) throw(std::bad_alloc) +void *CssmAllocatorMemoryFunctions::relayRealloc(void *mem, size_t size, void *ref) { return allocator(ref).realloc(mem, size); } -void *CssmAllocatorMemoryFunctions::relayCalloc(uint32 count, size_t size, void *ref) throw(std::bad_alloc) +void *CssmAllocatorMemoryFunctions::relayCalloc(uint32 count, size_t size, void *ref) { // Allocator doesn't have a calloc() method - void *mem = allocator(ref).malloc(size * count); - memset(mem, 0, size * count); + size_t alloc_size = 0; + if (os_mul_overflow(count, size, &alloc_size)) { + return NULL; + } + void *mem = allocator(ref).malloc(alloc_size); + memset(mem, 0, alloc_size); return mem; }