diff options
author | Junio C Hamano <gitster@pobox.com> | 2017-06-05 09:03:15 +0900 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-06-05 09:03:15 +0900 |
commit | e6f80aee299f530c9565b520aa76e6ff2e5649bc (patch) | |
tree | c66968077cfc4333c2fe703cdc090383d7a3711e | |
parent | Merge branch 'jk/alternate-ref-optim' into maint (diff) | |
parent | Windows: do not treat a path with backslashes as a remote's nick name (diff) | |
download | tgif-e6f80aee299f530c9565b520aa76e6ff2e5649bc.tar.xz |
Merge branch 'js/bs-is-a-dir-sep-on-windows' into maint
"foo\bar\baz" in "git fetch foo\bar\baz", even though there is no
slashes in it, cannot be a nickname for a remote on Windows, as
that is likely to be a pathname on a local filesystem.
* js/bs-is-a-dir-sep-on-windows:
Windows: do not treat a path with backslashes as a remote's nick name
mingw.h: permit arguments with side effects for is_dir_sep
-rw-r--r-- | compat/mingw.h | 6 | ||||
-rw-r--r-- | remote.c | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/compat/mingw.h b/compat/mingw.h index 3350169555..e03aecfe2e 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -398,7 +398,11 @@ HANDLE winansi_get_osfhandle(int fd); (isalpha(*(path)) && (path)[1] == ':' ? 2 : 0) int mingw_skip_dos_drive_prefix(char **path); #define skip_dos_drive_prefix mingw_skip_dos_drive_prefix -#define is_dir_sep(c) ((c) == '/' || (c) == '\\') +static inline int mingw_is_dir_sep(int c) +{ + return c == '/' || c == '\\'; +} +#define is_dir_sep mingw_is_dir_sep static inline char *mingw_find_last_dir_sep(const char *path) { char *ret = NULL; @@ -649,7 +649,12 @@ static int valid_remote_nick(const char *name) { if (!name[0] || is_dot_or_dotdot(name)) return 0; - return !strchr(name, '/'); /* no slash */ + + /* remote nicknames cannot contain slashes */ + while (*name) + if (is_dir_sep(*name++)) + return 0; + return 1; } const char *remote_for_branch(struct branch *branch, int *explicit) |