projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
trivial: clarify, what are the config's user.name and user.email about
[git.git]
/
sha1_file.c
diff --git
a/sha1_file.c
b/sha1_file.c
index
d451a94
..
6b7577d
100644
(file)
--- 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_)
{
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;
void *idx_map;
unsigned int *index;
unsigned long idx_size;
int nr, i;
- int fd
= open(path, O_RDONLY)
;
+ int fd;
struct stat st;
struct stat st;
+
+ fd = open(path, O_RDONLY);
if (fd < 0)
return -1;
if (fstat(fd, &st)) {
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");
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;
}
return 0;
}