Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2022-06-14 01:53:43 +0300
committerJunio C Hamano <gitster@pobox.com>2022-06-14 01:53:43 +0300
commitfe66167535dd8b395f16fcba7863c36beb365ef9 (patch)
treebbad8655331109127b8fe845bd9a05efd97b3b76 /remote.c
parent70055ef1bf813e184d2594a0dd8f733caead6ed3 (diff)
parent323822c72be59ce2900cc036c5bad4f10bafbb53 (diff)
Merge branch 'ab/remote-free-fix'
Use-after-free (with another forget-to-free) fix. * ab/remote-free-fix: remote.c: don't dereference NULL in freeing loop remote.c: remove braces from one-statement "for"-loops
Diffstat (limited to 'remote.c')
-rw-r--r--remote.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/remote.c b/remote.c
index 5824b08eb5..9b9bbfe80e 100644
--- a/remote.c
+++ b/remote.c
@@ -146,14 +146,12 @@ static void remote_clear(struct remote *remote)
free((char *)remote->name);
free((char *)remote->foreign_vcs);
- for (i = 0; i < remote->url_nr; i++) {
+ for (i = 0; i < remote->url_nr; i++)
free((char *)remote->url[i]);
- }
- FREE_AND_NULL(remote->pushurl);
+ FREE_AND_NULL(remote->url);
- for (i = 0; i < remote->pushurl_nr; i++) {
+ for (i = 0; i < remote->pushurl_nr; i++)
free((char *)remote->pushurl[i]);
- }
FREE_AND_NULL(remote->pushurl);
free((char *)remote->receivepack);
free((char *)remote->uploadpack);
@@ -2771,9 +2769,8 @@ void remote_state_clear(struct remote_state *remote_state)
{
int i;
- for (i = 0; i < remote_state->remotes_nr; i++) {
+ for (i = 0; i < remote_state->remotes_nr; i++)
remote_clear(remote_state->remotes[i]);
- }
FREE_AND_NULL(remote_state->remotes);
remote_state->remotes_alloc = 0;
remote_state->remotes_nr = 0;