Commit 7e1f0b222d581c5484622166b6f8041ee004cb17

Kim Altintop 2020-08-31T21:54:17

Return false instead of segfaulting when checking for default port `default_port_for_scheme` returns NULL if the scheme is not one of the builtin ones. This may cause a segmentation fault if a custom transport URL happens to contain a port number, and this code path is triggered (e.g. by setting git_fetch_options->update_fetchhead to 1).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
diff --git a/src/net.c b/src/net.c
index d42fce5..dbde626 100644
--- a/src/net.c
+++ b/src/net.c
@@ -336,7 +336,12 @@ bool git_net_url_valid(git_net_url *url)
 
 int git_net_url_is_default_port(git_net_url *url)
 {
-	return (strcmp(url->port, default_port_for_scheme(url->scheme)) == 0);
+	const char *default_port;
+
+	if ((default_port = default_port_for_scheme(url->scheme)) != NULL)
+		return (strcmp(url->port, default_port) == 0);
+	else
+		return false;
 }
 
 void git_net_url_swap(git_net_url *a, git_net_url *b)