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; }