mirror of
https://github.com/reactos/reactos.git
synced 2024-08-21 02:43:48 +00:00
Fix overflow caltions bugs in varus memmory functions, Thanks irc : Elrond (from TNG) for fixing calloc overflow bug.
svn path=/trunk/; revision=22196
This commit is contained in:
parent
3b3b7ad5fd
commit
f895d5ab82
|
@ -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<nSize))
|
||||
return NULL;
|
||||
|
||||
return HeapAlloc(hHeap, HEAP_ZERO_MEMORY, cSize );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -66,11 +76,18 @@ void* calloc(size_t _nmemb, size_t _size)
|
|||
*/
|
||||
void* realloc(void* _ptr, size_t _size)
|
||||
{
|
||||
size_t nSize;
|
||||
|
||||
if ( _size == 0)
|
||||
return NULL;
|
||||
|
||||
|
||||
nSize = ROUND_SIZE(_size);
|
||||
|
||||
if (nSize<_size)
|
||||
return NULL;
|
||||
|
||||
if (!_ptr) return malloc(_size);
|
||||
if (_size) return HeapReAlloc(hHeap, 0, _ptr, ROUND_SIZE(_size));
|
||||
if (_size) return HeapReAlloc(hHeap, 0, _ptr, nSize);
|
||||
free(_ptr);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -80,10 +97,17 @@ void* realloc(void* _ptr, size_t _size)
|
|||
*/
|
||||
void* _expand(void* _ptr, size_t _size)
|
||||
{
|
||||
size_t nSize;
|
||||
|
||||
if ( _size == 0)
|
||||
return NULL;
|
||||
|
||||
nSize = ROUND_SIZE(_size);
|
||||
|
||||
if (nSize<_size)
|
||||
return NULL;
|
||||
|
||||
return HeapReAlloc(hHeap, HEAP_REALLOC_IN_PLACE_ONLY, _ptr, ROUND_SIZE(_size));
|
||||
return HeapReAlloc(hHeap, HEAP_REALLOC_IN_PLACE_ONLY, _ptr, nSize);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue