clone: tighten "local paths with colons" check a bit
commit 6000334
(clone: allow cloning local paths with colons in them -
2013-05-04) made it possible to specify a path that has colons in it
without file://, e.g. ../foo:bar/somewhere. But the check was a bit
sloppy.
Consider the url '[foo]:bar'. The '[]' unwrapping code will turn the
string to 'foo\0:bar'. In effect this new string is the same as
'foo/:bar' in the check "path < strchrnul(host, '/')", which mistakes
it for a local path (with '/' before the first ':') when it's actually
not.
So disable the check for '/' before ':' when the URL has been mangled
by '[]' unwrapping.
[jn: with tests from Jeff King]
Noticed-by: Morten Stenshorne <mstensho@opera.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
This commit is contained in:

committed by
Jonathan Nieder

parent
60003340cd
commit
8d3d28f5db
@ -550,7 +550,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
|
||||
path = strchr(end, c);
|
||||
if (path && !has_dos_drive_prefix(end)) {
|
||||
if (c == ':') {
|
||||
if (path < strchrnul(host, '/')) {
|
||||
if (host != url || path < strchrnul(host, '/')) {
|
||||
protocol = PROTO_SSH;
|
||||
*path++ = '\0';
|
||||
} else /* '/' in the host part, assume local path */
|
||||
|
Reference in New Issue
Block a user