summaryrefslogtreecommitdiff
path: root/builtin/mailsplit.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2015-09-24 21:03:05 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-09-25 17:18:18 (GMT)
commitd270d7b7a2d631c3d11315f20bb0cf15e438dafa (patch)
treebb43a5ee55f2bfa2890a0b6758ca9bedf5bf8207 /builtin/mailsplit.c
parent7cd17e80579c2bffd6245837175a6e1b12a78045 (diff)
downloadgit-d270d7b7a2d631c3d11315f20bb0cf15e438dafa.zip
git-d270d7b7a2d631c3d11315f20bb0cf15e438dafa.tar.gz
git-d270d7b7a2d631c3d11315f20bb0cf15e438dafa.tar.bz2
mailsplit: fix FILE* leak in split_maildir
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>
Diffstat (limited to 'builtin/mailsplit.c')
-rw-r--r--builtin/mailsplit.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/builtin/mailsplit.c b/builtin/mailsplit.c
index 8e02ea1..9de06e3 100644
--- a/builtin/mailsplit.c
+++ b/builtin/mailsplit.c
@@ -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;
}