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>
This commit is contained in:

committed by
Junio C Hamano

parent
09a75abba4
commit
991d549f74
@ -498,8 +498,6 @@ static int add_graph_to_chain(struct commit_graph *g,
|
||||
cur_g = cur_g->base_graph;
|
||||
}
|
||||
|
||||
g->base_graph = chain;
|
||||
|
||||
if (chain) {
|
||||
if (unsigned_add_overflows(chain->num_commits,
|
||||
chain->num_commits_in_base)) {
|
||||
@ -510,6 +508,8 @@ static int add_graph_to_chain(struct commit_graph *g,
|
||||
g->num_commits_in_base = chain->num_commits + chain->num_commits_in_base;
|
||||
}
|
||||
|
||||
g->base_graph = chain;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user