diff options
author | Taylor Blau <me@ttaylorr.com> | 2023-07-13 01:37:41 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-07-14 18:32:03 +0200 |
commit | 5675150cc3bfc03c5721edcfc49fbe43b15b5209 (patch) | |
tree | 6378623b78240ab5ee5c1f642eac67902ed4a528 /midx.c | |
parent | midx.c: prevent overflow in `nth_midxed_object_oid()` (diff) | |
download | git-5675150cc3bfc03c5721edcfc49fbe43b15b5209.tar.xz git-5675150cc3bfc03c5721edcfc49fbe43b15b5209.zip |
midx.c: prevent overflow in `nth_midxed_offset()`
In a similar spirit as previous patches, avoid an overflow when looking
up object offsets in the MIDX's large offset table by guarding the
computation via `st_mult()`.
This instance is also OK as-is, since the left operand is the result of
`sizeof(...)`, which is already a `size_t`. But use `st_mult()` instead
here to make it explicit that this computation is to be performed using
64-bit unsigned integers.
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'midx.c')
-rw-r--r-- | midx.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -271,7 +271,8 @@ off_t nth_midxed_offset(struct multi_pack_index *m, uint32_t pos) die(_("multi-pack-index stores a 64-bit offset, but off_t is too small")); offset32 ^= MIDX_LARGE_OFFSET_NEEDED; - return get_be64(m->chunk_large_offsets + sizeof(uint64_t) * offset32); + return get_be64(m->chunk_large_offsets + + st_mult(sizeof(uint64_t), offset32)); } return offset32; |