From 338959da3e46340dfcec3af361c6062c3a992668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=86var=20Arnfj=C3=B6r=C3=B0=20Bjarmason?= Date: Tue, 7 Jun 2022 17:50:03 +0200 Subject: [PATCH 1/2] remote.c: remove braces from one-statement "for"-loops MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove braces that don't follow the CodingGuidelines from code added in fd3cb0501e1 (remote: move static variables into per-repository struct, 2021-11-17). A subsequent commit will edit code adjacent to this. Signed-off-by: Ævar Arnfjörð Bjarmason Signed-off-by: Junio C Hamano --- remote.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/remote.c b/remote.c index 42a4e7106e..eb07b667db 100644 --- a/remote.c +++ b/remote.c @@ -144,14 +144,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); - 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); @@ -2717,9 +2715,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; From 323822c72be59ce2900cc036c5bad4f10bafbb53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=86var=20Arnfj=C3=B6r=C3=B0=20Bjarmason?= Date: Tue, 7 Jun 2022 17:50:04 +0200 Subject: [PATCH 2/2] remote.c: don't dereference NULL in freeing loop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix a bug in fd3cb0501e1 (remote: move static variables into per-repository struct, 2021-11-17) where we'd free(remote->pushurl[i]) after having NULL'd out remote->pushurl. itself. We free "remote->pushurl" in the next "for"-loop, so doing this appears to have been a copy/paste error. Before this change GCC 12's -fanalyzer would correctly note that we'd dereference NULL in this case, this change fixes that: remote.c: In function ‘remote_clear’: remote.c:153:17: error: dereference of NULL ‘*remote.pushurl’ [CWE-476] [-Werror=analyzer-null-dereference] 153 | free((char *)remote->pushurl[i]); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [...] Signed-off-by: Ævar Arnfjörð Bjarmason Signed-off-by: Junio C Hamano --- remote.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remote.c b/remote.c index eb07b667db..bb55038e4c 100644 --- a/remote.c +++ b/remote.c @@ -146,7 +146,7 @@ static void remote_clear(struct remote *remote) 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++) free((char *)remote->pushurl[i]);