commit-graph: delay base_graph assignment in add_graph_to_chain()
When adding a graph to a chain, we do some consistency checks and then if everything looks good, set g->base_graph to add a link to the chain. But when we added a new consistency check in 209250ef38 (commit-graph.c: prevent overflow in add_graph_to_chain(), 2023-07-12), it comes _after_ we've already set g->base_graph. So we might return failure, even though we actually added to the chain. This hasn't caused a bug yet, because after failing to add to the chain, we discard the failed graph struct completely, leaking it. But in order to fix that, it's important that the struct be in a consistent and predictable state after the failure. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Oct 3, 2023 at 16:30 UTC
991d549f74862d07a38a077f34c0deaf65607c74
1 file changed
+2
-2
commit-graph.c
+2
-2
@@ -498,8 +498,6 @@ static int add_graph_to_chain(struct commit_graph *g,
498
cur_g = cur_g->base_graph;
499
}
500
501
- g->base_graph = chain;
502
-
501
if (chain) {
502
if (unsigned_add_overflows(chain->num_commits,
503
chain->num_commits_in_base)) {
@@ -510,6 +508,8 @@ static int add_graph_to_chain(struct commit_graph *g,
508
g->num_commits_in_base = chain->num_commits + chain->num_commits_in_base;
509
}
510
511
+ g->base_graph = chain;
512
+
513
return 1;
514
}
515