Prevent another segfault from bad URL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
diff --git a/src/netops.c b/src/netops.c
index 5f0db24..7e13f12 100644
--- a/src/netops.c
+++ b/src/netops.c
@@ -680,7 +680,7 @@ int gitno_extract_url_parts(
at = strchr(url, '@');
if (!slash ||
- (colon && slash < colon)) {
+ (colon && (slash < colon))) {
giterr_set(GITERR_NET, "Malformed URL");
return GIT_EINVALIDSPEC;
}
diff --git a/src/transports/ssh.c b/src/transports/ssh.c
index 6ce673d..4e2834b 100644
--- a/src/transports/ssh.c
+++ b/src/transports/ssh.c
@@ -213,10 +213,6 @@ static int git_ssh_extract_url_parts(
colon = strchr(url, ':');
- if (colon == NULL) {
- giterr_set(GITERR_NET, "Malformed URL: missing :");
- return -1;
- }
at = strchr(url, '@');
if (at) {
@@ -228,6 +224,11 @@ static int git_ssh_extract_url_parts(
*username = NULL;
}
+ if (colon == NULL || (colon < start)) {
+ giterr_set(GITERR_NET, "Malformed URL");
+ return -1;
+ }
+
*host = git__substrdup(start, colon - start);
GITERR_CHECK_ALLOC(*host);
@@ -316,7 +317,7 @@ static int _git_ssh_setup_conn(
const char *cmd,
git_smart_subtransport_stream **stream)
{
- char *host, *port=NULL, *user=NULL, *pass=NULL;
+ char *host=NULL, *port=NULL, *user=NULL, *pass=NULL;
const char *default_port="22";
ssh_stream *s;
LIBSSH2_SESSION* session=NULL;