Skip to content

Commit 4c4d3e7

Browse files
avargitster
authored andcommitted
submodule--helper: free rest of "displaypath" in "struct update_data"
Fix a leak in code added in c51f8f9 (submodule--helper: run update procedures from C, 2021-08-24), we clobber the "displaypath" member of the passed-in "struct update_data" both so that die() messages in this update_submodule() function itself can use it, and for the run_update_procedure() called within this function. Fix a leak in code added in 51f8f94e5b (submodule--helper: run update procedures from C, 2021-08-24). We'd always clobber the old "displaypath" member of the previously passed-in "struct update_data". A better fix for this would be to remove the "displaypath" member from the "struct update_data" entirely. Along with "oid", "suboid", "just_cloned" and "sm_path" it's managing members that mainly need to be passed between 1-3 stack frames of functions adjacent to this code. But doing so would be a much larger change (I have it locally, and fully untangling that in an incremental way is a 10 patch journey). So let's go for this much more isolated fix suggested by Glen. We FREE_AND_NULL() the "update_data->displaypath", the "AND_NULL()" part of that is needed due to the later "free(ud->displaypath)" in "update_data_release()" introduced in the preceding commit Moving ensure_core_worktree() out of update_submodule() may not be strictly required, but in doing so we are left with the exact same ordering as before, making this a smaller functional change. Helped-by: Glen Choo <[email protected]> Signed-off-by: Ævar Arnfjörð Bjarmason <[email protected]> Reviewed-by: Glen Choo <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent d40c42e commit 4c4d3e7

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

builtin/submodule--helper.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2484,13 +2484,6 @@ static int update_submodule(struct update_data *update_data)
24842484
{
24852485
int ret;
24862486

2487-
ret = ensure_core_worktree(update_data->sm_path);
2488-
if (ret)
2489-
return ret;
2490-
2491-
update_data->displaypath = get_submodule_displaypath(
2492-
update_data->sm_path, update_data->prefix);
2493-
24942487
ret = determine_submodule_update_strategy(the_repository,
24952488
update_data->just_cloned,
24962489
update_data->sm_path,
@@ -2596,7 +2589,15 @@ static int update_submodules(struct update_data *update_data)
25962589
update_data->just_cloned = ucd.just_cloned;
25972590
update_data->sm_path = ucd.sub->path;
25982591

2592+
code = ensure_core_worktree(update_data->sm_path);
2593+
if (code)
2594+
goto fail;
2595+
2596+
update_data->displaypath = get_submodule_displaypath(
2597+
update_data->sm_path, update_data->prefix);
25992598
code = update_submodule(update_data);
2599+
FREE_AND_NULL(update_data->displaypath);
2600+
fail:
26002601
if (!code)
26012602
continue;
26022603
ret = code;

0 commit comments

Comments
 (0)