1
0
mirror of https://github.com/git/git synced 2024-07-05 00:58:49 +00:00

fsck: free buffers on error in fsck_obj()

Move the code for releasing tree buffers and commit buffers in
fsck_obj() to the end of the function and make sure it's executed no
matter of an error is encountered or not.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
René Scharfe 2017-08-10 11:42:10 +02:00 committed by Junio C Hamano
parent 3d9c5b5c44
commit 83cd6f9017

View File

@ -335,6 +335,8 @@ static void check_connectivity(void)
static int fsck_obj(struct object *obj)
{
int err;
if (obj->flags & SEEN)
return 0;
obj->flags |= SEEN;
@ -345,20 +347,13 @@ static int fsck_obj(struct object *obj)
if (fsck_walk(obj, NULL, &fsck_obj_options))
objerror(obj, "broken links");
if (fsck_object(obj, NULL, 0, &fsck_obj_options))
return -1;
if (obj->type == OBJ_TREE) {
struct tree *item = (struct tree *) obj;
free_tree_buffer(item);
}
err = fsck_object(obj, NULL, 0, &fsck_obj_options);
if (err)
goto out;
if (obj->type == OBJ_COMMIT) {
struct commit *commit = (struct commit *) obj;
free_commit_buffer(commit);
if (!commit->parents && show_root)
printf("root %s\n", describe_object(&commit->object));
}
@ -374,7 +369,12 @@ static int fsck_obj(struct object *obj)
}
}
return 0;
out:
if (obj->type == OBJ_TREE)
free_tree_buffer((struct tree *)obj);
if (obj->type == OBJ_COMMIT)
free_commit_buffer((struct commit *)obj);
return err;
}
static int fsck_obj_buffer(const unsigned char *sha1, enum object_type type,