remote: plug memory leak when aliasing URLs

When we have a `url.*.insteadOf` configuration, then we end up aliasing URLs when populating remotes. One place where this happens is in `alias_all_urls()`, where we loop through all remotes and then alias each of their URLs. The actual aliasing logic is then contained in `alias_url()`, which returns an allocated string that contains the new URL. This URL replaces the old URL that we have in the strvec that contains all remote URLs. We replace the remote URLs via `strvec_replace()`, which does not hand over ownership of the new string to the vector. Still, we didn't free the aliased URL and thus have a memory leak here. Fix it by freeing the aliased string. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Aug 14, 2024 at 08:51 UTC ce01f92889a9398b5170bf7e28425c94173cfe06
2 files changed +3 -1
remote.c
+2
@@ -499,6 +499,7 @@ static void alias_all_urls(struct remote_state *remote_state)
499 if (alias)
500 strvec_replace(&remote_state->remotes[i]->pushurl,
501 j, alias);
502 + free(alias);
503 }
504 add_pushurl_aliases = remote_state->remotes[i]->pushurl.nr == 0;
505 for (j = 0; j < remote_state->remotes[i]->url.nr; j++) {
@@ -512,6 +513,7 @@ static void alias_all_urls(struct remote_state *remote_state)
513 if (alias)
514 strvec_replace(&remote_state->remotes[i]->url,
515 j, alias);
516 + free(alias);
517 }
518 }
519 }
t/t0210-trace2-normal.sh
+1 -1
@@ -2,7 +2,7 @@
2
3 test_description='test trace2 facility (normal target)'
4
5 -TEST_PASSES_SANITIZE_LEAK=false
5 +TEST_PASSES_SANITIZE_LEAK=true
6 . ./test-lib.sh
7
8 # Turn off any inherited trace2 settings for this test.