diff options
author | Taylor Blau <me@ttaylorr.com> | 2023-03-20 16:02:52 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-03-20 14:40:13 -0700 |
commit | e535db7c6983bdd16754b9a3b5cda5f41fd0e19a (patch) | |
tree | 019e23f97e83d4064b68104bfe1a591da24bb699 | |
parent | 0e2a13eb16f3d2049cc26b245d374697d5f132f5 (diff) | |
download | git-e535db7c6983bdd16754b9a3b5cda5f41fd0e19a.tar.gz |
pack-bitmap.c: use `bitmap_index_seek()` where possible
As described in the previous commit, now that we have a functional
`bitmap_index_seek()`, rewrite all callers that manually manipulate the
`map_pos` variable with calls to `bitmap_index_seek()`.
This means that all callers that adjust the value of `map_pos` have
those changes automatically bounds- and overflow-checked.
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | pack-bitmap.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/pack-bitmap.c b/pack-bitmap.c index 77da1b4c1c..3d4cada4b9 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -172,7 +172,7 @@ static struct ewah_bitmap *read_bitmap_1(struct bitmap_index *index) return NULL; } - index->map_pos += bitmap_size; + bitmap_index_seek(index, bitmap_size, SEEK_CUR); return b; } @@ -228,7 +228,7 @@ static int load_bitmap_header(struct bitmap_index *index) index->entry_count = ntohl(header->entry_count); index->checksum = header->checksum; - index->map_pos += header_size; + bitmap_index_seek(index, header_size, SEEK_CUR); return 0; } @@ -267,13 +267,15 @@ static struct stored_bitmap *store_bitmap(struct bitmap_index *index, static uint32_t read_be32(struct bitmap_index *bitmap_git) { uint32_t result = get_be32(bitmap_git->map + bitmap_git->map_pos); - bitmap_git->map_pos += sizeof(result); + bitmap_index_seek(bitmap_git, sizeof(uint32_t), SEEK_CUR); return result; } static uint8_t read_u8(struct bitmap_index *bitmap_git) { - return bitmap_git->map[bitmap_git->map_pos++]; + uint8_t result = bitmap_git->map[bitmap_git->map_pos]; + bitmap_index_seek(bitmap_git, sizeof(uint8_t), SEEK_CUR); + return result; } #define MAX_XOR_OFFSET 160 @@ -792,14 +794,16 @@ static struct stored_bitmap *lazy_bitmap_for_commit(struct bitmap_index *bitmap_ while (xor_items_nr) { xor_item = &xor_items[xor_items_nr - 1]; - bitmap_git->map_pos = xor_item->offset; + bitmap_index_seek(bitmap_git, xor_item->offset, SEEK_SET); + if (bitmap_git->map_size - bitmap_git->map_pos < bitmap_header_size) { error(_("corrupt ewah bitmap: truncated header for bitmap of commit \"%s\""), oid_to_hex(&xor_item->oid)); goto corrupt; } - bitmap_git->map_pos += sizeof(uint32_t) + sizeof(uint8_t); + bitmap_index_seek(bitmap_git, + sizeof(uint32_t) + sizeof(uint8_t), SEEK_CUR); xor_flags = read_u8(bitmap_git); bitmap = read_bitmap_1(bitmap_git); @@ -810,7 +814,7 @@ static struct stored_bitmap *lazy_bitmap_for_commit(struct bitmap_index *bitmap_ xor_items_nr--; } - bitmap_git->map_pos = offset; + bitmap_index_seek(bitmap_git, offset, SEEK_SET); if (bitmap_git->map_size - bitmap_git->map_pos < bitmap_header_size) { error(_("corrupt ewah bitmap: truncated header for bitmap of commit \"%s\""), oid_to_hex(oid)); @@ -840,7 +844,8 @@ static struct stored_bitmap *lazy_bitmap_for_commit(struct bitmap_index *bitmap_ * Instead, we can skip ahead and immediately read the flags and * ewah bitmap. */ - bitmap_git->map_pos += sizeof(uint32_t) + sizeof(uint8_t); + bitmap_index_seek(bitmap_git, sizeof(uint32_t) + sizeof(uint8_t), + SEEK_CUR); flags = read_u8(bitmap_git); bitmap = read_bitmap_1(bitmap_git); |