aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2007-06-26 14:34:02 -0700
committerJunio C Hamano <gitster@pobox.com>2007-06-26 18:02:15 -0700
commit1164f1e48d7c8ed613e8a371ecfce27220606e09 (patch)
tree62c634bcc0572fdff04f5015d26deca21aa6dd56
parent582c7393a47894ea299a82c2ae91fec3101e7559 (diff)
downloadgit-1164f1e48d7c8ed613e8a371ecfce27220606e09.tar.gz
git-1164f1e48d7c8ed613e8a371ecfce27220606e09.tar.xz
Fix zero-object version-2 packs
A pack-file can get created without any objects in it (to transfer "no data" - which can happen if you use a reference git repo, for example, or just otherwise just end up transferring only branch head information and already have all the objects themselves). And while we probably should never create an index for such a pack, if we do (and we do), the index file size sanity checking was incorrect. This fixes it. Reported-and-tested-by: Jocke Tjernlund <tjernlund@tjernlund.se> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--sha1_file.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sha1_file.c b/sha1_file.c
index c2f807f4c..b9d07de15 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -509,7 +509,10 @@ static int check_packed_git_idx(const char *path, struct packed_git *p)
* for offsets larger than 2^31.
*/
unsigned long min_size = 8 + 4*256 + nr*(20 + 4 + 4) + 20 + 20;
- if (idx_size < min_size || idx_size > min_size + (nr - 1)*8) {
+ unsigned long max_size = min_size;
+ if (nr)
+ max_size += (nr - 1)*8;
+ if (idx_size < min_size || idx_size > max_size) {
munmap(idx_map, idx_size);
return error("wrong index file size in %s", path);
}