summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 1e80e04)
raw | patch | inline | side by side (parent: 1e80e04)
author | Junio C Hamano <junkio@cox.net> | |
Fri, 23 Dec 2005 06:57:20 +0000 (22:57 -0800) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Fri, 23 Dec 2005 22:14:28 +0000 (14:14 -0800) |
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>
(cherry picked from 797bd6f490c91c07986382b9f268e0df712cb246 commit)
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>
(cherry picked from 797bd6f490c91c07986382b9f268e0df712cb246 commit)
sha1_file.c | patch | blob | history | |
t/t5300-pack-object.sh | patch | blob | history |
diff --git a/sha1_file.c b/sha1_file.c
index d451a94efed7d36d55cf1b77324eaf55e0d50d69..6b7577dbc4ed845da1a70b6d727370423b086735 100644 (file)
--- a/sha1_file.c
+++ b/sha1_file.c
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)) {
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;
}
diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh
index 5b50536b54ff84b6a6e51c210be39773c6879443..7dfb1ab77b070447c4dd2b9f645785feec6f5480 100755 (executable)
--- a/t/t5300-pack-object.sh
+++ b/t/t5300-pack-object.sh
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 \