From: Sam Vilain Date: Wed, 6 Jun 2007 10:25:17 +0000 (+1200) Subject: Don't assume tree entries that are not dirs are blobs X-Git-Tag: v1.5.2.2~10^2 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=e2ac7cb5fbcf1407003aa07cdcd14141527ea2e3;p=git.git Don't assume tree entries that are not dirs are blobs When scanning the trees in track_tree_refs() there is a "lazy" test that assumes that entries are either directories or files. Don't do that. Signed-off-by: Junio C Hamano --- diff --git a/object.c b/object.c index cfc4969ed..16793d995 100644 --- a/object.c +++ b/object.c @@ -160,8 +160,11 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t parse_tag_buffer(tag, buffer, size); obj = &tag->object; } else { + warning("object %s has unknown type id %d\n", sha1_to_hex(sha1), type); obj = NULL; } + if (obj && obj->type == OBJ_NONE) + obj->type = type; *eaten_p = eaten; return obj; } diff --git a/tree.c b/tree.c index e4a39aa3c..e946dac06 100644 --- a/tree.c +++ b/tree.c @@ -173,8 +173,13 @@ static void track_tree_refs(struct tree *item) continue; if (S_ISDIR(entry.mode)) obj = &lookup_tree(entry.sha1)->object; - else + else if (S_ISREG(entry.mode) || S_ISLNK(entry.mode)) obj = &lookup_blob(entry.sha1)->object; + else { + warning("in tree %s: entry %s has bad mode %.6o\n", + sha1_to_hex(item->object.sha1), entry.path, entry.mode); + obj = lookup_unknown_object(entry.sha1); + } refs->ref[i++] = obj; } set_object_refs(&item->object, refs);