Re: [PATCH 05/11] submodule-config: avoid memory leak
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 16, 2022, 04:36 UTC
- Message-ID
- <xmqqmtedw7fm.fsf@gitster.g>
- In-Reply-To
- <591166e07d87fdb5efc2769d3e2963e3f0412720.1655336146.git.gitgitgadget@gmail.com>
"Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 7 quoted lines
> From: Johannes Schindelin <johannes.schindelin@gmx.de> > > In 961b130d20c9 (branch: add --recurse-submodules option for branch > creation, 2022-01-28), a funny pattern was introduced where first some > struct is `xmalloc()`ed, then we resize an array whose element type is > the same struct, and then the first struct's contents are copied into > the last element of that array.
Sigh. The original is butt ugly, with this strange pattern and structure assignments etc. I wonder how something like this slipped through our reviews.
I wonder if it would help for me to stop trusting reviews by less experienced reviewers too much, and instead give sanity checks to more patches myself from now on, but I certainly cannot afford the time and my mental health to do so for all the patches X-<.
Will queue.
Show 20 quoted lines
> if (S_ISGITLINK(name_entry->mode) &&
> is_tree_submodule_active(r, root_tree, tree_path)) {
> - st_entry = xmalloc(sizeof(*st_entry));
> + ALLOC_GROW(out->entries, out->entry_nr + 1,
> + out->entry_alloc);
> + st_entry = &out->entries[out->entry_nr++];
> +
> st_entry->name_entry = xmalloc(sizeof(*st_entry->name_entry));
> *st_entry->name_entry = *name_entry;
> st_entry->submodule =
> @@ -766,9 +769,6 @@ static void traverse_tree_submodules(struct repository *r,
> root_tree))
> FREE_AND_NULL(st_entry->repo);
>
> - ALLOC_GROW(out->entries, out->entry_nr + 1,
> - out->entry_alloc);
> - out->entries[out->entry_nr++] = *st_entry;
> } else if (S_ISDIR(name_entry->mode))
> traverse_tree_submodules(r, root_tree, tree_path,
> &name_entry->oid, out);