]> git.ipfire.org Git - thirdparty/git.git/commitdiff
commit-reach(paint_down_to_common): plug two memory leaks
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 28 Feb 2024 09:44:07 +0000 (09:44 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 28 Feb 2024 17:47:03 +0000 (09:47 -0800)
When a commit is missing, we return early (currently pretending that no
merge basis could be found in that case). At that stage, it is possible
that a merge base could have been found already, and added to the
`result`, which is now leaked.

The priority queue has a similar issue: There might still be a commit in
that queue.

Let's release both, to address the potential memory leaks.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
commit-reach.c

index ecc913fc99ba9e6b88df675462a2b8f912cbd0ce..bfa1b6454dc3245a7a587f08b6e5f739bb63d912 100644 (file)
@@ -104,8 +104,11 @@ static struct commit_list *paint_down_to_common(struct repository *r,
                        parents = parents->next;
                        if ((p->object.flags & flags) == flags)
                                continue;
-                       if (repo_parse_commit(r, p))
+                       if (repo_parse_commit(r, p)) {
+                               clear_prio_queue(&queue);
+                               free_commit_list(result);
                                return NULL;
+                       }
                        p->object.flags |= flags;
                        prio_queue_put(&queue, p);
                }