status: fix for old-style submodules with commondir

In f9b7573f6b (repository: free fields before overwriting them,
2017-09-05), Git was taught to release memory before overwriting it, but
357a03ebe9 (repository.c: move env-related setup code back to
environment.c, 2018-03-03) changed the code so that it would not
_always_ be overwritten.

As a consequence, the `commondir` attribute would point to
already-free()d memory.

This seems not to cause problems in core Git, but there are add-on
patches in Git for Windows where the `commondir` attribute is
subsequently used and causing invalid memory accesses e.g. in setups
containing old-style submodules (i.e. the ones with a `.git` directory
within theirs worktrees) that have `commondir` configured.

This fixes https://github.com/git-for-windows/git/pull/4083.

Signed-off-by: Andrey Zabavnikov <zabavnikov@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Andrey Zabavnikov 2022-10-28 17:12:06 +03:00 коммит произвёл Johannes Schindelin
Родитель 9bce0f18c5
Коммит 3982fcfdef
1 изменённых файлов: 1 добавлений и 1 удалений

Просмотреть файл

@ -48,7 +48,7 @@ static void repo_set_commondir(struct repository *repo,
{ {
struct strbuf sb = STRBUF_INIT; struct strbuf sb = STRBUF_INIT;
free(repo->commondir); FREE_AND_NULL(repo->commondir);
if (commondir) { if (commondir) {
repo->different_commondir = 1; repo->different_commondir = 1;