From 5074c962aa005f50c46ce810a7912c05157f35c3 Mon Sep 17 00:00:00 2001 From: Maniac- Date: Sat, 15 Jan 2022 17:29:33 +0200 Subject: [PATCH] Update main.cpp Memory fixes, head_end doesnt get freed and you shouldnt use ->prev pointer after its freed. Also memory leak when payload is selected. --- src/main.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index afa959a..86af20d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -95,14 +95,15 @@ extern "C" int _start(int argc, char **argv) { // Somewhere in this loader is a memory leak. // This is a hacky solution to free that memory. uint32_t head_end = (uint32_t) malloc(1024); - MEMExpHeapBlock *curUsedBlock = (MEMExpHeapBlock *) (head_end - 0x14); + MEMExpHeapBlock *prevBlock, *curUsedBlock = (MEMExpHeapBlock *) (head_end - 0x14); while (curUsedBlock != 0) { - curUsedBlock = curUsedBlock->prev; + prevBlock = curUsedBlock->prev; free(&curUsedBlock[1]); if(((uint32_t) &curUsedBlock[1]) == memory_start){ break; } + curUsedBlock = prevBlock; } int res = -1; @@ -256,6 +257,7 @@ std::string PayloadSelectionScreen(const std::map &pay OSSleepTicks(OSMillisecondsToTicks(16)); } + free(screenBuffer); int i = 0; for (auto const&[key, val] : payloads) { if (i == selected) { @@ -263,6 +265,5 @@ std::string PayloadSelectionScreen(const std::map &pay } i++; } - free(screenBuffer); return ""; -} \ No newline at end of file +}