Browse Source

LibC: Fix busted realloc() implementation.

Andreas Kling 6 years ago
parent
commit
3b42db0b4c
1 changed files with 5 additions and 1 deletions
  1. 5 1
      LibC/stdlib.cpp

+ 5 - 1
LibC/stdlib.cpp

@@ -9,6 +9,7 @@
 #include <AK/Assertions.h>
 #include <AK/Types.h>
 #include <Kernel/Syscall.h>
+#include <AK/StdLibExtras.h>
 
 extern "C" {
 
@@ -160,8 +161,11 @@ void* realloc(void *ptr, size_t size)
     validate_mallocation(ptr, "realloc()");
     auto* header = (MallocHeader*)((((byte*)ptr) - sizeof(MallocHeader)));
     size_t old_size = header->size;
+    if (size == old_size)
+        return ptr;
     auto* new_ptr = malloc(size);
-    memcpy(new_ptr, ptr, old_size);
+    memcpy(new_ptr, ptr, min(old_size, size));
+    free(ptr);
     return new_ptr;
 }