fsck-cache: fix SIGSEGV on bad tag object
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 3 May 2005 14:57:56 +0000 (07:57 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 3 May 2005 14:57:56 +0000 (07:57 -0700)
fsck_tag() failes to notice that the parsing of the tag may
have failed in the parse_object() call on the object that it
is tagging.

Noticed by Junio.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fsck-cache.c

index 637aededbdc0a321519ecdaeeb6da61ce71319d5..fb0d82f3320b7971d50d73893d777e3ddf1bd73b 100644 (file)
@@ -133,14 +133,17 @@ static int fsck_commit(struct commit *commit)
 
 static int fsck_tag(struct tag *tag)
 {
+       struct object *tagged = tag->tagged;
+
+       if (!tagged) {
+               printf("bad object in tag %s\n", sha1_to_hex(tag->object.sha1));
+               return -1;
+       }
        if (!show_tags)
                return 0;
 
-       printf("tagged %s %s",
-              tag->tagged->type,
-              sha1_to_hex(tag->tagged->sha1));
-       printf(" (%s) in %s\n",
-              tag->tag, sha1_to_hex(tag->object.sha1));
+       printf("tagged %s %s", tagged->type, sha1_to_hex(tagged->sha1));
+       printf(" (%s) in %s\n", tag->tag, sha1_to_hex(tag->object.sha1));
        return 0;
 }