Skip to content

Commit

Permalink
connect.c: ignore extra colon after hostname
Browse files Browse the repository at this point in the history
Ignore an extra ':' at the end of the hostname in URL's like
"ssh://example.com:/path/to/repo"

The colon is meant to separate a port number from the hostname.
If the port is empty, the colon should be ignored, see RFC 3986.

It had been working for URLs with ssh:// scheme, but was unintentionally
broken in 86ceb3, "allow ssh://user@[2001:db8::1]/repo.git"

Reported-by: Reid Woodbury Jr. <reidw@rawsound.com>
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Torsten Bögershausen authored and Junio C Hamano committed Apr 9, 2015
1 parent 3f55cca commit 6b6c5f7
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 16 deletions.
2 changes: 2 additions & 0 deletions connect.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,8 @@ static void get_host_and_port(char **host, const char **port)
if (end != colon + 1 && *end == '\0' && 0 <= portnr && portnr < 65536) {
*colon = 0;
*port = colon + 1;
} else if (!colon[1]) {
*colon = 0;
}
}
}
Expand Down
17 changes: 10 additions & 7 deletions t/t5500-fetch-pack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -576,13 +576,16 @@ do
do
for h in host user@host user@[::1] user@::1
do
test_expect_success "fetch-pack --diag-url $p://$h/$r" '
check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
'
# "/~" -> "~" conversion
test_expect_success "fetch-pack --diag-url $p://$h/~$r" '
check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
'
for c in "" :
do
test_expect_success "fetch-pack --diag-url $p://$h$c/$r" '
check_prot_host_port_path $p://$h/$r $p "$h" NONE "/$r"
'
# "/~" -> "~" conversion
test_expect_success "fetch-pack --diag-url $p://$h$c/~$r" '
check_prot_host_port_path $p://$h/~$r $p "$h" NONE "~$r"
'
done
done
for h in host User@host User@[::1]
do
Expand Down
21 changes: 12 additions & 9 deletions t/t5601-clone.sh
Original file line number Diff line number Diff line change
Expand Up @@ -387,14 +387,17 @@ do
done

#with ssh:// scheme
test_expect_success 'clone ssh://host.xz/home/user/repo' '
test_clone_url "ssh://host.xz/home/user/repo" host.xz "/home/user/repo"
'

# from home directory
test_expect_success 'clone ssh://host.xz/~repo' '
test_clone_url "ssh://host.xz/~repo" host.xz "~repo"
#ignore trailing colon
for tcol in "" :
do
test_expect_success "clone ssh://host.xz$tcol/home/user/repo" '
test_clone_url "ssh://host.xz$tcol/home/user/repo" host.xz /home/user/repo
'
# from home directory
test_expect_success "clone ssh://host.xz$tcol/~repo" '
test_clone_url "ssh://host.xz$tcol/~repo" host.xz "~repo"
'
done

# with port number
test_expect_success 'clone ssh://host.xz:22/home/user/repo' '
Expand All @@ -407,9 +410,9 @@ test_expect_success 'clone ssh://host.xz:22/~repo' '
'

#IPv6
for tuah in ::1 [::1] user@::1 user@[::1] [user@::1]
for tuah in ::1 [::1] [::1]: user@::1 user@[::1] user@[::1]: [user@::1] [user@::1]:
do
ehost=$(echo $tuah | tr -d "[]")
ehost=$(echo $tuah | sed -e "s/1]:/1]/ "| tr -d "[]")
test_expect_success "clone ssh://$tuah/home/user/repo" "
test_clone_url ssh://$tuah/home/user/repo $ehost /home/user/repo
"
Expand Down

0 comments on commit 6b6c5f7

Please sign in to comment.