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>

Taylor Blau committed Jul 12, 2023 at 19:37 UTC 5675150cc3bfc03c5721edcfc49fbe43b15b5209
1 file changed +2 -1
midx.c
+2 -1
@@ -271,7 +271,8 @@ off_t nth_midxed_offset(struct multi_pack_index *m, uint32_t pos)
271 die(_("multi-pack-index stores a 64-bit offset, but off_t is too small"));
272
273 offset32 ^= MIDX_LARGE_OFFSET_NEEDED;
274 - return get_be64(m->chunk_large_offsets + sizeof(uint64_t) * offset32);
274 + return get_be64(m->chunk_large_offsets +
275 + st_mult(sizeof(uint64_t), offset32));
276 }
277
278 return offset32;