From: Junio C Hamano Date: Tue, 28 Jun 2005 06:56:02 GMT Subject: [PATCH] Obtain sha1_file_info() for deltified pack entry properly. Message-ID: <7vpsu7x94t.fsf@assigned-by-dhcp.cox.net> In-Reply-To: <7v64vzyqyw.fsf_-_@assigned-by-dhcp.cox.net> I will be sending these three patches: [PATCH 1/3] Obtain sha1_file_info() for deltified pack entry properly. [PATCH 2/3] git-cat-file: use sha1_object_info() on '-t'. [PATCH 3/3] git-cat-file: '-s' to find out object size. The first one is slightly different from what I sent earlier to you privately. If you have already applied it, please apply the 4-liner alternate patch attached to this message on top of it for the fix included in the one in this series (and drop the first one, obviously). The second and third patches fell out as a bonus while I was debugging the sha1_file_info(). Especially the third one is in "because we can do it so cheaply now", not "because I need to have that feature" category, and I do not mind too much if you drop it, but I suspect somebody may find it useful. The "4-liner alternate patch" follows. ------------ Add missing use_packed_git() call. The function sha1_object_info() was using packed GIT file without making sure it is mapped, which resulted in segfaulting. We would need to introduce unuse_packed_git() call and do proper use counting to figure out when it is safe to unmap, but currently we do not unmap packed file yet. Signed-off-by: Junio C Hamano --- sha1_file.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/sha1_file.c b/sha1_file.c --- a/sha1_file.c +++ b/sha1_file.c @@ -675,6 +675,10 @@ static int packed_object_info(struct pac offset = entry->offset; if (p->pack_size - 5 < offset) die("object offset outside of pack file"); + + if (use_packed_git(p)) + die("cannot map packed file"); + pack = p->pack_base + offset; size = (pack[1] << 24) + (pack[2] << 16) + (pack[3] << 8) + pack[4]; left = p->pack_size - offset - 5; ------------------------------------------------