diff --git a/reactos/lib/crt/stdlib/malloc.c b/reactos/lib/crt/stdlib/malloc.c index 1ce9c4ae7cb..44832f767b6 100644 --- a/reactos/lib/crt/stdlib/malloc.c +++ b/reactos/lib/crt/stdlib/malloc.c @@ -36,10 +36,17 @@ extern HANDLE hHeap; */ void* malloc(size_t _size) { + size_t nSize; + if ( _size == 0) return NULL; - - return HeapAlloc(hHeap, 0, ROUND_SIZE(_size)); + + nSize = ROUND_SIZE(_size); + + if (nSize<_size) + return NULL; + + return HeapAlloc(hHeap, 0, nSize); } /* @@ -54,11 +61,14 @@ void free(void* _ptr) * @implemented */ void* calloc(size_t _nmemb, size_t _size) -{ - if ( _size == 0) - return NULL; - - return HeapAlloc(hHeap, HEAP_ZERO_MEMORY, ROUND_SIZE(_nmemb*_size) ); +{ + size_t nSize = _nmemb * _size; + size_t cSize = ROUND_SIZE(nSize); + + if ((_nmemb > ((size_t)-1 / _size) || (nSize == 0) || (cSize