]> git.99rst.org Git - git.git/commitdiff
commit-graph.c: prevent overflow in `merge_commit_graph()`
authorTaylor Blau <redacted>
Wed, 12 Jul 2023 23:38:13 +0000 (19:38 -0400)
committerJunio C Hamano <redacted>
Fri, 14 Jul 2023 16:32:03 +0000 (09:32 -0700)
When merging two commit graphs, ensure that we don't attempt to merge
two graphs which, when combined, have more total commits than the 32-bit
unsigned maximum.

Signed-off-by: Taylor Blau <redacted>
Signed-off-by: Junio C Hamano <redacted>
commit-graph.c

index d9795e3aa43fabcef5122437780ffb3837e639ac..8333ce8e047810a17da153b79f9f9fae63d854cf 100644 (file)
@@ -2179,6 +2179,11 @@ static void merge_commit_graph(struct write_commit_graph_context *ctx,
        uint32_t i;
        uint32_t offset = g->num_commits_in_base;
 
+       if (unsigned_add_overflows(ctx->commits.nr, g->num_commits))
+               die(_("cannot merge graph %s, too many commits: %"PRIuMAX),
+                   oid_to_hex(&g->oid),
+                   (uintmax_t)st_add(ctx->commits.nr, g->num_commits));
+
        ALLOC_GROW(ctx->commits.list, ctx->commits.nr + g->num_commits, ctx->commits.alloc);
 
        for (i = 0; i < g->num_commits; i++) {
git clone https://git.99rst.org/PROJECT