From 2d40250f9b63b2d63d5a331248f8a00b0b7d0dc0 Mon Sep 17 00:00:00 2001 From: Michael du Breuil Date: Mon, 26 Aug 2019 17:22:11 -0700 Subject: [PATCH] AP_HAL_SITL: Fix bad check order on heap_realloc --- libraries/AP_HAL_SITL/Util.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/AP_HAL_SITL/Util.cpp b/libraries/AP_HAL_SITL/Util.cpp index 5ef00e2c1b..812f2eebc7 100644 --- a/libraries/AP_HAL_SITL/Util.cpp +++ b/libraries/AP_HAL_SITL/Util.cpp @@ -95,17 +95,17 @@ void *HALSITL::Util::heap_realloc(void *heap_ptr, void *ptr, size_t new_size) old_size = old_header->allocation_size; } + if ((heapp->current_heap_usage + new_size - old_size) > heapp->scripting_max_heap_size) { + // fail the allocation as we don't have the memory. Note that we don't simulate fragmentation + return nullptr; + } + heapp->current_heap_usage -= old_size; if (new_size == 0) { free(old_header); return nullptr; } - if ((heapp->current_heap_usage + new_size - old_size) > heapp->scripting_max_heap_size) { - // fail the allocation as we don't have the memory. Note that we don't simulate fragmentation - return nullptr; - } - heap_allocation_header *new_header = (heap_allocation_header *)malloc(new_size + sizeof(heap_allocation_header)); if (new_header == nullptr) { // total failure to allocate, this is very surprising in SITL