From 467c75ae1264807c25bd76c0c50ef46c63a2d248 Mon Sep 17 00:00:00 2001 From: Mr-Wiseguy Date: Sun, 13 Apr 2025 22:01:03 -0400 Subject: [PATCH] Allow freeing null pointers in the `recomp_free` export to match the C spec for `free` --- librecomp/src/heap.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/librecomp/src/heap.cpp b/librecomp/src/heap.cpp index beb7cd4..f84ac71 100644 --- a/librecomp/src/heap.cpp +++ b/librecomp/src/heap.cpp @@ -2,6 +2,7 @@ #include "librecomp/addresses.hpp" #include "librecomp/overlays.hpp" +#include "librecomp/helpers.hpp" static uint32_t heap_offset; @@ -15,7 +16,12 @@ extern "C" void recomp_alloc(uint8_t* rdram, recomp_context* ctx) { } extern "C" void recomp_free(uint8_t* rdram, recomp_context* ctx) { - recomp::free(rdram, TO_PTR(void, ctx->r4)); + PTR(void) to_free = _arg<0, PTR(void)>(rdram, ctx); + // Handle NULL frees. + if (to_free == NULLPTR) { + return; + } + recomp::free(rdram, TO_PTR(void, to_free)); } void recomp::register_heap_exports() {