From ca73549717447e1ff5e23efb6564b75d85f6289c Mon Sep 17 00:00:00 2001 From: goeiecool9999 <7033575+goeiecool9999@users.noreply.github.com> Date: Fri, 9 Jan 2026 16:47:59 +0100 Subject: [PATCH] nim: Fix memory leak (#1775) Store NIMPackage structs in vector instead of pointers on the heap --- src/Cafe/IOSU/legacy/iosu_nim.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Cafe/IOSU/legacy/iosu_nim.cpp b/src/Cafe/IOSU/legacy/iosu_nim.cpp index b529640d..5cab16f8 100644 --- a/src/Cafe/IOSU/legacy/iosu_nim.cpp +++ b/src/Cafe/IOSU/legacy/iosu_nim.cpp @@ -40,7 +40,7 @@ namespace iosu std::vector titlesLatestVersion; // nim packages // note: Seems like scope.rpx expects the number of packages to never change after the initial GetNum call? - std::vector packages; + std::vector packages; bool packageListReady; bool backgroundThreadStarted; } g_nim = {}; @@ -139,11 +139,10 @@ namespace iosu if(latestVersionInfo->version <= (uint32)titleList[i].titleVersion ) continue; // already on latest version // add to packages - NIMPackage* nimPackage = (NIMPackage*)malloc(sizeof(NIMPackage)); - memset(nimPackage, 0, sizeof(NIMPackage)); - nimPackage->titleId = titleId; - nimPackage->type = PACKAGE_TYPE_UPDATE; - g_nim.packages.push_back(nimPackage); + NIMPackage nimPackage{}; + nimPackage.titleId = titleId; + nimPackage.type = PACKAGE_TYPE_UPDATE; + g_nim.packages.emplace_back(std::move(nimPackage)); } // check for AOC/titles to download // todo @@ -302,7 +301,7 @@ namespace iosu memset(titleIdList, 0, sizeof(uint64) * maxCount); for (auto& package : g_nim.packages) { - titleIdList[count] = _swapEndianU64(package->titleId); + titleIdList[count] = _swapEndianU64(package.titleId); count++; if (count >= maxCount) break; @@ -334,7 +333,7 @@ namespace iosu return; std::vector idbeIconCache = std::vector(); g_nim.titlesLatestVersion = std::vector(); - g_nim.packages = std::vector(); + g_nim.packages.clear(); g_nim.packageListReady = false; g_nim.backgroundThreadStarted = false; std::thread t2(iosuNim_thread);