Commit 048f837b2fd5cd12ed7e3ca497f11460ab3114a9

Ben Straub 2013-10-31T13:30:22

Prevent another segfault from bad URL

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;