]> git.ipfire.org Git - thirdparty/git.git/commitdiff
commit-graph.c: prevent overflow in `merge_commit_graph()`
authorTaylor Blau <me@ttaylorr.com>
Wed, 12 Jul 2023 23:38:13 +0000 (19:38 -0400)
committerJunio C Hamano <gitster@pobox.com>
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 <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
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++) {