From 1a9ada3590c574a81c2218a0454e45c2326aebe6 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 29 Jul 2019 22:53:16 +1000 Subject: [PATCH] Don't leak memory when a resource fails to download in launcher --- src/LScreens.c | 4 ++-- src/LWeb.c | 12 ++++-------- src/LWeb.h | 4 ++-- src/Resources.c | 1 + 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/LScreens.c b/src/LScreens.c index 1342052b9..547f33e31 100644 --- a/src/LScreens.c +++ b/src/LScreens.c @@ -844,8 +844,8 @@ static void MainScreen_TickSignIn(struct MainScreen* s) { LWebTask_Tick(&SignInTask.Base); if (!SignInTask.Base.Completed) return; - if (SignInTask.Error.length) { - LLabel_SetText(&s->lblStatus, &SignInTask.Error); + if (SignInTask.Error) { + LLabel_SetConst(&s->lblStatus, SignInTask.Error); LWidget_Redraw(&s->lblStatus); } else if (SignInTask.Base.Success) { /* website returns case correct username */ diff --git a/src/LWeb.c b/src/LWeb.c index 84d045eb4..03cfc4181 100644 --- a/src/LWeb.c +++ b/src/LWeb.c @@ -264,16 +264,12 @@ struct SignInTaskData SignInTask; char userBuffer[STRING_SIZE]; static void SignInTask_LogError(const String* str) { - static const String userErr = String_FromConst("&cWrong username or password"); - static const String verErr = String_FromConst("&cAccount verification required"); - static const String unkErr = String_FromConst("&cUnknown error occurred"); - if (String_CaselessEqualsConst(str, "username") || String_CaselessEqualsConst(str, "password")) { - SignInTask.Error = userErr; + SignInTask.Error = "&cWrong username or password"; } else if (String_CaselessEqualsConst(str, "verification")) { - SignInTask.Error = verErr; + SignInTask.Error = "&cAccount verification required"; } else if (str->length) { - SignInTask.Error = unkErr; + SignInTask.Error = "&cUnknown error occurred"; } } @@ -302,7 +298,7 @@ void SignInTask_Run(const String* user, const String* pass) { LWebTask_Reset(&SignInTask.Base); String_InitArray(SignInTask.Username, userBuffer); - SignInTask.Error.length = 0; + SignInTask.Error = NULL; String_InitArray(tmp, tmpBuffer); SignInTask_Append(&tmp, "username=", user); diff --git a/src/LWeb.h b/src/LWeb.h index 2a9d35fbf..92bad802a 100644 --- a/src/LWeb.h +++ b/src/LWeb.h @@ -67,8 +67,8 @@ void GetTokenTask_Run(void); extern struct SignInTaskData { struct LWebTask Base; - String Username; /* Username to sign in as. Changed to case correct username. */ - String Error; /* If sign in fails, the reason as to why. */ + String Username; /* Username to sign in as. Changed to case correct username. */ + const char* Error; /* If sign in fails, the reason as to why. */ } SignInTask; void SignInTask_Run(const String* user, const String* pass); diff --git a/src/Resources.c b/src/Resources.c index 0459f36c6..4d7d8bbdd 100644 --- a/src/Resources.c +++ b/src/Resources.c @@ -763,6 +763,7 @@ CC_NOINLINE static bool Fetcher_Get(const String* id, struct HttpRequest* req) { Fetcher_Result = req->Result; Fetcher_StatusCode = req->StatusCode; + HttpRequest_Free(req); Fetcher_Finish(); return false; }