From: Andrej Krpic Date: Mon, 22 Dec 2014 17:55:11 +0000 (+0100) Subject: uhttpd: Fix possible memory leaks when generating directory listing X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=bf0948ef5ee92ace7f8f46ab7cf71ddec09a90a1;p=project%2Fuhttpd.git 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 --- 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]); } }