From bf0948ef5ee92ace7f8f46ab7cf71ddec09a90a1 Mon Sep 17 00:00:00 2001 From: Andrej Krpic Date: Mon, 22 Dec 2014 18:55:11 +0100 Subject: [PATCH] uhttpd: Fix possible memory leaks when generating directory listing scandir() call requires free() of each returned dirent structure and parent list. Code constructing HTML response of directory listing is missing a call to free in some cases. Signed-off-by: Andrej Krpic --- file.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/file.c b/file.c index 6b3bb82..60dfdfa 100644 --- a/file.c +++ b/file.c @@ -479,11 +479,11 @@ static void list_entries(struct client *cl, struct dirent **files, int count, bool dir = !!(files[i]->d_type & DT_DIR); if (name[0] == '.' && name[1] == 0) - continue; + goto next; sprintf(file, "%s", name); if (stat(local_path, &s)) - continue; + goto next; if (!dir) { suffix = ""; @@ -492,7 +492,7 @@ static void list_entries(struct client *cl, struct dirent **files, int count, } if (!(s.st_mode & mode)) - continue; + goto next; uh_chunk_printf(cl, "
  • %s%s" @@ -505,6 +505,7 @@ static void list_entries(struct client *cl, struct dirent **files, int count, type, s.st_size / 1024.0); *file = 0; +next: free(files[i]); } } -- 2.11.0