diff --git a/src/client/menu/menu.c b/src/client/menu/menu.c index 03f0b1f9..d07a4c73 100644 --- a/src/client/menu/menu.c +++ b/src/client/menu/menu.c @@ -5712,10 +5712,18 @@ HasSkinsInDir(const char *dirname, int *num) for (j = 0; j < num_png; j ++) { - if (list_png[j] && !strchr(list_png[j] + dirname_size, '/')) + if (list_png[j]) { - *curr = list_png[j]; - curr++; + if (!strchr(list_png[j] + dirname_size, '/')) + { + *curr = list_png[j]; + curr++; + } + else + { + /* unused in final response */ + free(list_png[j]); + } } } @@ -5728,10 +5736,18 @@ HasSkinsInDir(const char *dirname, int *num) for (j = 0; j < num_pcx; j ++) { - if (list_pcx[j] && !strchr(list_pcx[j] + dirname_size, '/')) + if (list_pcx[j]) { - *curr = list_pcx[j]; - curr++; + if (!strchr(list_pcx[j] + dirname_size, '/')) + { + *curr = list_pcx[j]; + curr++; + } + else + { + /* unused in final response */ + free(list_pcx[j]); + } } } @@ -5744,10 +5760,18 @@ HasSkinsInDir(const char *dirname, int *num) for (j = 0; j < num_m8; j ++) { - if (list_m8[j] && !strchr(list_m8[j] + dirname_size, '/')) + if (list_m8[j]) { - *curr = list_m8[j]; - curr++; + if (!strchr(list_m8[j] + dirname_size, '/')) + { + *curr = list_m8[j]; + curr++; + } + else + { + /* unused in final response */ + free(list_m8[j]); + } } } diff --git a/src/common/filesystem.c b/src/common/filesystem.c index 513e0df9..7c0e7b82 100644 --- a/src/common/filesystem.c +++ b/src/common/filesystem.c @@ -880,6 +880,12 @@ FS_LoadFile(const char *path, void **buffer) if (size <= 0) { + if (size == 0) + { + /* empty file, close before exit*/ + FS_FCloseFile(f); + } + if (buffer) { *buffer = NULL; diff --git a/src/common/models.c b/src/common/models.c index 65e39dfb..f0b19e81 100644 --- a/src/common/models.c +++ b/src/common/models.c @@ -175,6 +175,12 @@ Mod_LoadFileMD5Merge(const char *namewe, void **buffer) i, md5skinname); } } + + /* clean up original buffer */ + if (skins) + { + free(skins); + } } /* prepare final file */