Skip to content

Commit

Permalink
check_packed_git_idx(): check integrity of the idx file itself.
Browse files Browse the repository at this point in the history
Although pack-check.c had routine to verify the checksum for the
pack index file itself, the core did not check it before using
it.

This is stolen from the patch to tighten packname requirements.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Dec 23, 2005
1 parent 5f94c73 commit 797bd6f
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
16 changes: 15 additions & 1 deletion sha1_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -321,12 +321,16 @@ struct packed_git *packed_git;
static int check_packed_git_idx(const char *path, unsigned long *idx_size_,
void **idx_map_)
{
SHA_CTX ctx;
unsigned char sha1[20];
void *idx_map;
unsigned int *index;
unsigned long idx_size;
int nr, i;
int fd = open(path, O_RDONLY);
int fd;
struct stat st;

fd = open(path, O_RDONLY);
if (fd < 0)
return -1;
if (fstat(fd, &st)) {
Expand Down Expand Up @@ -364,6 +368,16 @@ static int check_packed_git_idx(const char *path, unsigned long *idx_size_,
if (idx_size != 4*256 + nr * 24 + 20 + 20)
return error("wrong index file size");

/*
* File checksum.
*/
SHA1_Init(&ctx);
SHA1_Update(&ctx, idx_map, idx_size-20);
SHA1_Final(sha1, &ctx);

if (memcmp(sha1, idx_map + idx_size - 20, 20))
return error("index checksum mismatch");

return 0;
}

Expand Down
7 changes: 7 additions & 0 deletions t/t5300-pack-object.sh
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,13 @@ test_expect_success \
else :;
fi &&
cp test-1-${packname_1}.pack test-3.pack &&
dd if=/dev/zero of=test-3.idx count=1 bs=1 conv=notrunc seek=1200 &&
if git-verify-pack test-3.pack
then false
else :;
fi &&
:'

test_expect_success \
Expand Down

0 comments on commit 797bd6f

Please sign in to comment.