From: RenĂ© Scharfe Date: Tue, 12 Jun 2012 18:46:56 GMT Subject: Re: git: Wrong parsing of ssh urls with IPv6 literals ignores port Message-ID: <4FD78EA0.2090306@lsrfire.ath.cx> In-Reply-To: <20120610090516.GA30177@burratino> Am 10.06.2012 11:05, schrieb Jonathan Nieder: > 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(-) How about this instead? Except perhaps with a commit message that is vaguely understandable? -- >8 -- If we encounter an address part shaped like "[HOST]:PORT", we skip the opening bracket and replace the closing one with a NUL. The variable host then points to HOST and we've cut off the PORT part. Thus, when we go looking for it using host a bit later, we can't find it. Start at end instead, which either points to the colon, if present, or is equal to host. Signed-off-by: Rene Scharfe --- We have similar code in daemon.c. Can we share more? And make it testable? connect.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/connect.c b/connect.c index 912cdde..41b7400 100644 --- a/connect.c +++ b/connect.c @@ -536,7 +536,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) - port = get_port(host); + port = get_port(end); if (protocol == PROTO_GIT) { /* These underlying connection commands die() if they -- 1.7.10.2