From 713ea324f5a8294e776c0dd9f2e47688a765fb28 Mon Sep 17 00:00:00 2001 From: onefang Date: Sat, 21 Mar 2020 01:52:02 +1000 Subject: Plug more leaks. I'm more and more sure that the rest are MariaDBs fault, but I'm still searching. --- src/sledjchisl/sledjchisl.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/sledjchisl/sledjchisl.c b/src/sledjchisl/sledjchisl.c index 2ecded0..4ca9b4e 100644 --- a/src/sledjchisl/sledjchisl.c +++ b/src/sledjchisl/sledjchisl.c @@ -2513,13 +2513,14 @@ HTMLfile *checkHTMLcache(char *file) if (NULL == HTMLfileCache) HTMLfileCache = qhashtbl(0, 0); - HTMLfile *ret = (HTMLfile *) HTMLfileCache->get(HTMLfileCache, file, NULL, false); + HTMLfile *ret = (HTMLfile *) HTMLfileCache->get(HTMLfileCache, file, NULL, true); int fd = open(file, O_RDONLY); size_t length = 0; if (-1 == fd) { HTMLfileCache->remove(HTMLfileCache, file); + free(ret); ret = NULL; } else @@ -2528,6 +2529,7 @@ HTMLfile *checkHTMLcache(char *file) if (fstat(fd, &sb) == -1) { HTMLfileCache->remove(HTMLfileCache, file); + free(ret); ret = NULL; E("Failed to stat %s", file); } @@ -2536,6 +2538,7 @@ HTMLfile *checkHTMLcache(char *file) if ((NULL != ret) && (ret->last.tv_sec < sb.st_mtim.tv_sec)) { HTMLfileCache->remove(HTMLfileCache, file); + free(ret); ret = NULL; } @@ -3399,7 +3402,7 @@ t("Lua %s = %s", n, (char *) obj.data); } } tnm->unlock(tnm); - Rd->database->putstr(Rd->database, "UserAccounts.PrincipalID", tnm->getstr(tnm, "UUID", true)); + Rd->database->putstr(Rd->database, "UserAccounts.PrincipalID", tnm->getstr(tnm, "UUID", false)); } } free(munchie); @@ -3557,12 +3560,14 @@ static int validateName(reqData *Rd, qhashtbl_t *data, char *nm) { boolean login = strcmp("login", Rd->doit) == 0; int ret = 0; - unsigned char *name = data->getstr(data, "name", true); // We have to be unsigned coz of isalnum(). + unsigned char *name; // We have to be unsigned coz of isalnum(). char *where = NULL; if ((strcmp("cancel", Rd->doit) == 0) || (strcmp("logout", Rd->doit) == 0)) return ret; + name = data->getstr(data, "name", true); + if ((NULL == name) || ('\0' == name[0])) { bitch(Rd, "Please supply an account name.", "None supplied."); @@ -3698,7 +3703,7 @@ static int validateName(reqData *Rd, qhashtbl_t *data, char *nm) Rd->stuff->putstr(Rd->stuff, "UUID", getStrH(Rd->database, "UserAccounts.PrincipalID")); Rd->stuff->putstr(Rd->stuff, "level", getStrH(Rd->database, "UserAccounts.Userlevel")); if (s) {s--; *s = ' '; s++;} - Rd->stuff->putstr(Rd->stuff, "name", xstrdup(name)); + Rd->stuff->putstr(Rd->stuff, "name", name); if (s) {s--; *s = '\0'; s++;} } } @@ -4055,7 +4060,7 @@ static int validateUUID(reqData *Rd, qhashtbl_t *data, char *name) if (rows) { dbPull(Rd, "UserAccounts", rows); - Rd->stuff->putstr(Rd->stuff, "level", xstrdup(getStrH(Rd->database, "UserAccounts.Userlevel"))); + Rd->stuff->putstr(Rd->stuff, "level", getStrH(Rd->database, "UserAccounts.Userlevel")); free(rows->rows); free(rows->fieldNames); free(rows); @@ -4064,7 +4069,7 @@ static int validateUUID(reqData *Rd, qhashtbl_t *data, char *name) { Rd->database->putstr(Rd->database, "UserAccounts.PrincipalID", xstrdup(uuid)); } - Rd->stuff->putstr(Rd->stuff, "UUID", xstrdup(uuid)); + Rd->stuff->putstr(Rd->stuff, "UUID", uuid); } return ret; @@ -5016,6 +5021,7 @@ goto sendReply; tmp0 = qfile_get_ext(toybuf); tmp1 = mimeTypes->getstr(mimeTypes, tmp0, false); + free(tmp0); if (NULL != tmp1) { if (strncmp("text/", tmp1, 5) != 0) @@ -5051,6 +5057,7 @@ goto sendReply; getStats(database, stats); unfragize(thisFile->fragments, Rd, false); + free(thisFile); sendReply: /* Send headers. -- cgit v1.1