From 985380c0d8668a96456566602b0b042cafc63915 Mon Sep 17 00:00:00 2001 From: TuxSH <1922548+TuxSH@users.noreply.github.com> Date: Mon, 27 Mar 2023 21:49:00 +0200 Subject: [PATCH] loader: break when failing to load process (e.g. missing boot.3dsx) --- sysmodules/loader/source/loader.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/sysmodules/loader/source/loader.c b/sysmodules/loader/source/loader.c index d28f242..ab94287 100644 --- a/sysmodules/loader/source/loader.c +++ b/sysmodules/loader/source/loader.c @@ -248,7 +248,13 @@ static Result GetProgramInfoImpl(ExHeader_Info *exheaderInfo, u64 programHandle) return 0; } - TRY(IsHioId(programHandle) ? FSREG_GetProgramInfo(exheaderInfo, 1, programHandle) : PXIPM_GetProgramInfo(exheaderInfo, programHandle)); + if (IsHioId(programHandle)) + res = FSREG_GetProgramInfo(exheaderInfo, 1, programHandle); + else + res = PXIPM_GetProgramInfo(exheaderInfo, programHandle); + + if (R_FAILED(res)) + return res; // Tweak 3dsx placeholder title exheaderInfo if (hbldrIs3dsxTitle(exheaderInfo->aci.local_caps.title_id)) @@ -361,9 +367,10 @@ static Result LoadProcess(Handle *process, u64 programHandle) TRY(GetProgramInfo(programHandle)); if (hbldrIs3dsxTitle(g_exheaderInfo.aci.local_caps.title_id)) - return hbldrLoadProcess(process, &g_exheaderInfo); + return assertSuccess(hbldrLoadProcess(process, &g_exheaderInfo)); else - return LoadProcessImpl(process, &g_exheaderInfo, programHandle); + // Break on failure, even here (if GetProgramInfo succeeds we shouldn't be here anyway) + return assertSuccess(LoadProcessImpl(process, &g_exheaderInfo, programHandle)); } static Result RegisterProgram(u64 *programHandle, FS_ProgramInfo *title, FS_ProgramInfo *update)