From 9d577c1064758145e1de5072afb86b0294e6f8ff Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Tue, 27 Dec 2005 21:36:51 +0000 Subject: [PATCH] Fixed realloc(). Supplying a NULL pointer crashed. Furthermore, a size argument value of 0 should only free the old allocation. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15688 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/boot/loader/heap.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/system/boot/loader/heap.cpp b/src/system/boot/loader/heap.cpp index e9c12ae04a..78f8d07d26 100644 --- a/src/system/boot/loader/heap.cpp +++ b/src/system/boot/loader/heap.cpp @@ -292,17 +292,24 @@ realloc(void *oldBuffer, size_t newSize) { // ToDo: improve this implementation! + if (newSize == 0) { + free(oldBuffer); + return NULL; + } + void *newBuffer = malloc(newSize); if (newBuffer == NULL) return NULL; - free_chunk *oldChunk = free_chunk::SetToAllocated(oldBuffer); + if (oldBuffer) { + free_chunk *oldChunk = free_chunk::SetToAllocated(oldBuffer); - if (newSize > oldChunk->size) - newSize = oldChunk->size; + if (newSize > oldChunk->size) + newSize = oldChunk->size; - memcpy(newBuffer, oldBuffer, newSize); - free(oldBuffer); + memcpy(newBuffer, oldBuffer, newSize); + free(oldBuffer); + } return newBuffer; }