diff options
author | Junio C Hamano <junkio@cox.net> | 2005-12-24 00:02:08 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-12-24 00:02:08 -0800 |
commit | 6ab58895cd951f6f5c96fa432afb122cfeb12746 (patch) | |
tree | 2a708aa291f58887198d3951e342996b2257e88f /sha1_file.c | |
parent | GIT 1.0.3 (diff) | |
parent | mailinfo: iconv does not like "latin-1" -- should spell it "latin1" (diff) | |
download | tgif-6ab58895cd951f6f5c96fa432afb122cfeb12746.tar.xz |
GIT 1.0.4
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'sha1_file.c')
-rw-r--r-- | sha1_file.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/sha1_file.c b/sha1_file.c index d451a94efe..6b7577dbc4 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -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)) { @@ -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; } |