From: Jonathan Nieder Date: Sun, 10 Jun 2012 09:05:16 GMT Subject: Re: git: Wrong parsing of ssh urls with IPv6 literals ignores port Message-ID: <20120610090516.GA30177@burratino> In-Reply-To: <20111022001704.3115.87464.reportbug@hejmo> Hi Eduardo, Eduardo TrĂ¡pani wrote[1]: > git clone ssh://[2001:0:53aa:64c:1845:430c:4179:d71f]:3333/deponejo/unua > > Will try to connect to port 22 and not 3333. The port number seems to be > ignored. True. How about something like this (untested)? Signed-off-by: Jonathan Nieder --- [1] http://bugs.debian.org/646178 connect.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git i/connect.c w/connect.c index 912cddee..7ec1b258 100644 --- i/connect.c +++ w/connect.c @@ -494,11 +494,19 @@ struct child_process *git_connect(int fd[2], const char *url_orig, if (host[0] == '[') { end = strchr(host + 1, ']'); if (end) { - if (protocol != PROTO_GIT) { + if (protocol == PROTO_GIT) + end++; + else { *end = 0; host++; + end++; + if (!*end || *end == c) + ; /* good */ + else if (protocol == PROTO_SSH && c != ':' && *end == ':') + port = end + 1; + else + die("garbage after [] string in URL"); } - end++; } else end = host; } else @@ -535,7 +543,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig, /* * Add support for ssh port: ssh://host.xy:/... */ - if (protocol == PROTO_SSH && host != url) + if (protocol == PROTO_SSH && host != url && !port) port = get_port(host); if (protocol == PROTO_GIT) {