]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mailsplit: fix FILE* leak in split_maildir
authorJeff King <peff@peff.net>
Thu, 24 Sep 2015 21:03:05 +0000 (17:03 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 25 Sep 2015 17:18:18 +0000 (10:18 -0700)
If we encounter an error while splitting a maildir, we exit
the function early, leaking the open filehandle. This isn't
a big deal, since we exit the program soon after, but it's
easy enough to be careful.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/mailsplit.c

index 8e02ea109ac8f9fd739c4d54b7a709916f88022a..9de06e3cf7f9d1c2a7aed810efe16d856ae8fa61 100644 (file)
@@ -150,6 +150,7 @@ static int split_maildir(const char *maildir, const char *dir,
 {
        char file[PATH_MAX];
        char name[PATH_MAX];
+       FILE *f = NULL;
        int ret = -1;
        int i;
        struct string_list list = STRING_LIST_INIT_DUP;
@@ -160,7 +161,6 @@ static int split_maildir(const char *maildir, const char *dir,
                goto out;
 
        for (i = 0; i < list.nr; i++) {
-               FILE *f;
                snprintf(file, sizeof(file), "%s/%s", maildir, list.items[i].string);
                f = fopen(file, "r");
                if (!f) {
@@ -177,10 +177,13 @@ static int split_maildir(const char *maildir, const char *dir,
                split_one(f, name, 1);
 
                fclose(f);
+               f = NULL;
        }
 
        ret = skip;
 out:
+       if (f)
+               fclose(f);
        string_list_clear(&list, 1);
        return ret;
 }