Merge branch 'tb/object-access-overflow-protection'
Various offset computation in the code that accesses the packfiles and other data in the object layer has been hardened against arithmetic overflow, especially on 32-bit systems. * tb/object-access-overflow-protection: commit-graph.c: prevent overflow in `verify_commit_graph()` commit-graph.c: prevent overflow in `write_commit_graph()` commit-graph.c: prevent overflow in `merge_commit_graph()` commit-graph.c: prevent overflow in `split_graph_merge_strategy()` commit-graph.c: prevent overflow in `load_tree_for_commit()` commit-graph.c: prevent overflow in `fill_commit_in_graph()` commit-graph.c: prevent overflow in `fill_commit_graph_info()` commit-graph.c: prevent overflow in `load_oid_from_graph()` commit-graph.c: prevent overflow in add_graph_to_chain() commit-graph.c: prevent overflow in `write_commit_graph_file()` pack-bitmap.c: ensure that eindex lookups don't overflow midx.c: prevent overflow in `fill_included_packs_batch()` midx.c: prevent overflow in `write_midx_internal()` midx.c: store `nr`, `alloc` variables as `size_t`'s midx.c: prevent overflow in `nth_midxed_offset()` midx.c: prevent overflow in `nth_midxed_object_oid()` midx.c: use `size_t`'s for fanout nr and alloc packfile.c: use checked arithmetic in `nth_packed_object_offset()` packfile.c: prevent overflow in `load_idx()` packfile.c: prevent overflow in `nth_packed_object_id()`
This commit is contained in:
@ -1293,7 +1293,7 @@ static void show_extended_objects(struct bitmap_index *bitmap_git,
|
||||
for (i = 0; i < eindex->count; ++i) {
|
||||
struct object *obj;
|
||||
|
||||
if (!bitmap_get(objects, bitmap_num_objects(bitmap_git) + i))
|
||||
if (!bitmap_get(objects, st_add(bitmap_num_objects(bitmap_git), i)))
|
||||
continue;
|
||||
|
||||
obj = eindex->objects[i];
|
||||
@ -1472,7 +1472,7 @@ static void filter_bitmap_exclude_type(struct bitmap_index *bitmap_git,
|
||||
* them individually.
|
||||
*/
|
||||
for (i = 0; i < eindex->count; i++) {
|
||||
uint32_t pos = i + bitmap_num_objects(bitmap_git);
|
||||
size_t pos = st_add(i, bitmap_num_objects(bitmap_git));
|
||||
if (eindex->objects[i]->type == type &&
|
||||
bitmap_get(to_filter, pos) &&
|
||||
!bitmap_get(tips, pos))
|
||||
@ -1563,7 +1563,7 @@ static void filter_bitmap_blob_limit(struct bitmap_index *bitmap_git,
|
||||
}
|
||||
|
||||
for (i = 0; i < eindex->count; i++) {
|
||||
uint32_t pos = i + bitmap_num_objects(bitmap_git);
|
||||
size_t pos = st_add(i, bitmap_num_objects(bitmap_git));
|
||||
if (eindex->objects[i]->type == OBJ_BLOB &&
|
||||
bitmap_get(to_filter, pos) &&
|
||||
!bitmap_get(tips, pos) &&
|
||||
@ -2037,7 +2037,8 @@ static uint32_t count_object_type(struct bitmap_index *bitmap_git,
|
||||
|
||||
for (i = 0; i < eindex->count; ++i) {
|
||||
if (eindex->objects[i]->type == type &&
|
||||
bitmap_get(objects, bitmap_num_objects(bitmap_git) + i))
|
||||
bitmap_get(objects,
|
||||
st_add(bitmap_num_objects(bitmap_git), i)))
|
||||
count++;
|
||||
}
|
||||
|
||||
@ -2451,7 +2452,8 @@ static off_t get_disk_usage_for_extended(struct bitmap_index *bitmap_git)
|
||||
for (i = 0; i < eindex->count; i++) {
|
||||
struct object *obj = eindex->objects[i];
|
||||
|
||||
if (!bitmap_get(result, bitmap_num_objects(bitmap_git) + i))
|
||||
if (!bitmap_get(result,
|
||||
st_add(bitmap_num_objects(bitmap_git), i)))
|
||||
continue;
|
||||
|
||||
if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
|
||||
|
Reference in New Issue
Block a user