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>
This commit is contained in:

committed by
Junio C Hamano

parent
7cd17e8057
commit
d270d7b7a2
@ -150,6 +150,7 @@ static int split_maildir(const char *maildir, const char *dir,
|
|||||||
{
|
{
|
||||||
char file[PATH_MAX];
|
char file[PATH_MAX];
|
||||||
char name[PATH_MAX];
|
char name[PATH_MAX];
|
||||||
|
FILE *f = NULL;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
int i;
|
int i;
|
||||||
struct string_list list = STRING_LIST_INIT_DUP;
|
struct string_list list = STRING_LIST_INIT_DUP;
|
||||||
@ -160,7 +161,6 @@ static int split_maildir(const char *maildir, const char *dir,
|
|||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
for (i = 0; i < list.nr; i++) {
|
for (i = 0; i < list.nr; i++) {
|
||||||
FILE *f;
|
|
||||||
snprintf(file, sizeof(file), "%s/%s", maildir, list.items[i].string);
|
snprintf(file, sizeof(file), "%s/%s", maildir, list.items[i].string);
|
||||||
f = fopen(file, "r");
|
f = fopen(file, "r");
|
||||||
if (!f) {
|
if (!f) {
|
||||||
@ -177,10 +177,13 @@ static int split_maildir(const char *maildir, const char *dir,
|
|||||||
split_one(f, name, 1);
|
split_one(f, name, 1);
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
f = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = skip;
|
ret = skip;
|
||||||
out:
|
out:
|
||||||
|
if (f)
|
||||||
|
fclose(f);
|
||||||
string_list_clear(&list, 1);
|
string_list_clear(&list, 1);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user