{"thread":{"id":"39032","subject":"[PATCH v2] connect.c: Ignore extra colon after hostname","startedAt":"2015-04-07T20:03:25Z","lastAt":"2015-04-07T20:03:25Z","messageCount":1,"participants":["Torsten Bögershausen"],"isPatch":true,"patchVersion":2,"patchTotal":null},"messages":[{"id":"259152","messageId":"5524380D.4020306@web.de","threadId":"39032","inReplyTo":null,"subject":"[PATCH v2] connect.c: Ignore extra colon after hostname","fromName":"Torsten Bögershausen","fromEmail":"tboegi@web.de","sentAt":"2015-04-07T20:03:25Z","receivedAt":"2015-04-07T20:03:25Z","isPatch":true,"sender":{"key":"tboegi@web.de","avatar":"https://avatars.githubusercontent.com/u/7138363?v=4"},"body":"Ignore an extra ':' at the end of the hostname in URL's like\n\"ssh://example.com:/path/to/repo\"\n\nThe colon is meant to separate a port number from the hostname.\nIf the port is empty, the colon should be ignored, see RFC 3986.\n\nIt had been working for URLs with ssh:// scheme, but was unintentionally\nbroken in 86ceb3, \"allow ssh://user@[2001:db8::1]/repo.git\"\n\nReported-by: Reid Woodbury Jr. <reidw@rawsound.com>\nSigned-off-by: Torsten Bögershausen <tboegi@web.de>\n---\nChanges since v1 (Thanks to Eric Sunshine)\n- typo: s/ment/meant/\n- remove wrong test_done\n\n connect.c             |  2 ++\n t/t5500-fetch-pack.sh | 17 ++++++++++-------\n t/t5601-clone.sh      | 21 ++++++++++++---------\n 3 files changed, 24 insertions(+), 16 deletions(-)\n\ndiff --git a/connect.c b/connect.c\nindex ce0e121..14c924b 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -310,6 +310,8 @@ static void get_host_and_port(char **host, const char **port)\n \t\tif (end != colon + 1 && *end == '\\0' && 0 <= portnr && portnr < 65536) {\n \t\t\t*colon = 0;\n \t\t\t*port = colon + 1;\n+\t\t} else if (!colon[1]) {\n+\t\t\t*colon = 0;\n \t\t}\n \t}\n }\ndiff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh\nindex 692d717..3a9b775 100755\n--- a/t/t5500-fetch-pack.sh\n+++ b/t/t5500-fetch-pack.sh\n@@ -576,13 +576,16 @@ do\n \tdo\n \t\tfor h in host user@host user@[::1] user@::1\n \t\tdo\n-\t\t\ttest_expect_success \"fetch-pack --diag-url $p://$h/$r\" '\n-\t\t\t\tcheck_prot_host_port_path $p://$h/$r $p \"$h\" NONE \"/$r\"\n-\t\t\t'\n-\t\t\t# \"/~\" -> \"~\" conversion\n-\t\t\ttest_expect_success \"fetch-pack --diag-url $p://$h/~$r\" '\n-\t\t\t\tcheck_prot_host_port_path $p://$h/~$r $p \"$h\" NONE \"~$r\"\n-\t\t\t'\n+\t\t\tfor c in \"\" :\n+\t\t\tdo\n+\t\t\t\ttest_expect_success \"fetch-pack --diag-url $p://$h$c/$r\" '\n+\t\t\t\t\tcheck_prot_host_port_path $p://$h/$r $p \"$h\" NONE \"/$r\"\n+\t\t\t\t'\n+\t\t\t\t# \"/~\" -> \"~\" conversion\n+\t\t\t\ttest_expect_success \"fetch-pack --diag-url $p://$h$c/~$r\" '\n+\t\t\t\t\tcheck_prot_host_port_path $p://$h/~$r $p \"$h\" NONE \"~$r\"\n+\t\t\t\t'\n+\t\t\tdone\n \t\tdone\n \t\tfor h in host User@host User@[::1]\n \t\tdo\ndiff --git a/t/t5601-clone.sh b/t/t5601-clone.sh\nindex 02b40b1..1befc45 100755\n--- a/t/t5601-clone.sh\n+++ b/t/t5601-clone.sh\n@@ -387,14 +387,17 @@ do\n done\n \n #with ssh:// scheme\n-test_expect_success 'clone ssh://host.xz/home/user/repo' '\n-\ttest_clone_url \"ssh://host.xz/home/user/repo\" host.xz \"/home/user/repo\"\n-'\n-\n-# from home directory\n-test_expect_success 'clone ssh://host.xz/~repo' '\n-\ttest_clone_url \"ssh://host.xz/~repo\" host.xz \"~repo\"\n+#ignore trailing colon\n+for tcol in \"\" :\n+do\n+\ttest_expect_success \"clone ssh://host.xz$tcol/home/user/repo\" '\n+\t\ttest_clone_url \"ssh://host.xz$tcol/home/user/repo\" host.xz /home/user/repo\n+\t'\n+\t# from home directory\n+\ttest_expect_success \"clone ssh://host.xz$tcol/~repo\" '\n+\ttest_clone_url \"ssh://host.xz$tcol/~repo\" host.xz \"~repo\"\n '\n+done\n \n # with port number\n test_expect_success 'clone ssh://host.xz:22/home/user/repo' '\n@@ -407,9 +410,9 @@ test_expect_success 'clone ssh://host.xz:22/~repo' '\n '\n \n #IPv6\n-for tuah in ::1 [::1] user@::1 user@[::1] [user@::1]\n+for tuah in ::1 [::1] [::1]: user@::1 user@[::1] user@[::1]: [user@::1] [user@::1]:\n do\n-\tehost=$(echo $tuah | tr -d \"[]\")\n+\tehost=$(echo $tuah | sed -e \"s/1]:/1]/ \"| tr -d \"[]\")\n \ttest_expect_success \"clone ssh://$tuah/home/user/repo\" \"\n \t  test_clone_url ssh://$tuah/home/user/repo $ehost /home/user/repo\n \t\"\n-- \n2.2.0.rc1.790.ge19fcd2\n"}]}