]> git.ipfire.org Git - thirdparty/git.git/commitdiff
commit-graph.c: prevent overflow in `fill_commit_in_graph()`
authorTaylor Blau <me@ttaylorr.com>
Wed, 12 Jul 2023 23:38:05 +0000 (19:38 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 14 Jul 2023 16:32:03 +0000 (09:32 -0700)
In a similar spirit as previous commits, ensure that we don't overflow
when the lex_index of the commit we are trying to fill out exceeds
2^32-1/(g->hash_len+16).

The other hunk touched in this patch is not susceptible to overflow,
since an explicit cast is made to a 64-bit unsigned value. For clarity
and consistency with the rest of the commits in this series, avoid a
tricky to reason about cast, and use `st_mult()` directly.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
commit-graph.c

index 69110e4dbb0c87ae6ea5cd4cd979be7f9532eafc..5e32063d3dce484de3520011bdc5264f9f97aef3 100644 (file)
@@ -838,7 +838,7 @@ static int fill_commit_in_graph(struct repository *r,
        fill_commit_graph_info(item, g, pos);
 
        lex_index = pos - g->num_commits_in_base;
-       commit_data = g->chunk_commit_data + (g->hash_len + 16) * lex_index;
+       commit_data = g->chunk_commit_data + st_mult(g->hash_len + 16, lex_index);
 
        item->object.parsed = 1;
 
@@ -860,7 +860,7 @@ static int fill_commit_in_graph(struct repository *r,
        }
 
        parent_data_ptr = (uint32_t*)(g->chunk_extra_edges +
-                         4 * (uint64_t)(edge_value & GRAPH_EDGE_LAST_MASK));
+                         st_mult(4, edge_value & GRAPH_EDGE_LAST_MASK));
        do {
                edge_value = get_be32(parent_data_ptr);
                pptr = insert_parent_or_die(r, g,