]> granicus.if.org Git - git/commitdiff
ewah: adjust callers of ewah_read_mmap()
authorJeff King <peff@peff.net>
Fri, 15 Jun 2018 03:44:43 +0000 (23:44 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 18 Jun 2018 16:13:57 +0000 (09:13 -0700)
The return value of ewah_read_mmap() is now an ssize_t,
since we could (in theory) process up to 32GB of data. This
would never happen in practice, but a corrupt or malicious
.bitmap or index file could convince us to do so.

Let's make sure that we don't stuff the value into an int,
which would cause us to incorrectly move our pointer
forward.  We'd always move too little, since negative values
are used for reporting errors. So the worst case is just
that we end up reporting a corrupt file, not an
out-of-bounds read.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
dir.c
pack-bitmap.c

diff --git a/dir.c b/dir.c
index 7c4b45e30e0ac87527ff0ef3fd8c90670a1e2064..c9714cfb402457a3a84bb9b159ca3d4d9bc3cad8 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -2831,7 +2831,8 @@ struct untracked_cache *read_untracked_extension(const void *data, unsigned long
        struct read_data rd;
        const unsigned char *next = data, *end = (const unsigned char *)data + sz;
        const char *ident;
-       int ident_len, len;
+       int ident_len;
+       ssize_t len;
        const char *exclude_per_dir;
 
        if (sz <= 1 || end[-1] != '\0')
index 9270983e5f581e40f894a8885396e43d13e71015..7e92d8319561a9a2ae61be9e9264c6d7ae2d0cdf 100644 (file)
@@ -118,7 +118,7 @@ static struct ewah_bitmap *read_bitmap_1(struct bitmap_index *index)
 {
        struct ewah_bitmap *b = ewah_pool_new();
 
-       int bitmap_size = ewah_read_mmap(b,
+       ssize_t bitmap_size = ewah_read_mmap(b,
                index->map + index->map_pos,
                index->map_size - index->map_pos);