git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 2/2] Windows: do not treat a path with backslashes as a remote's nick name

From
Johannes Sixt <j6t@kdbg.org>
Date
May 25, 2017, 12:00 UTC
Message-ID
<10ee6b91-cd54-d43a-4cfb-d3baa2af7e7a@kdbg.org>
In-Reply-To
<c36ae9af-b566-5bb3-ad70-ee7f0051ca9a@kdbg.org>

On Windows, the remote repository name in, e.g., `git fetch foo\bar` is clearly not a nickname for a configured remote repository. However, the function valid_remote_nick() does not account for backslashes. Use is_dir_sep() to check for both slashes and backslashes on Windows.

This was discovered while playing with Duy's patches that warn after fopen() failures. The functions that read the branches and remotes files are protected by a valid_remote_nick() check. Without this change, a Windows style absolute path is incorrectly regarded as nickname and is concatenated to a prefix and used with fopen(). This triggers warnings because a colon in a path name is not allowed:

C:\Temp\gittest>git fetch C:\Temp\gittest
warning: unable to access '.git/remotes/C:\Temp\gittest': Invalid argument
warning: unable to access '.git/branches/C:\Temp\gittest': Invalid argument
From C:\Temp\gittest
 * branch            HEAD       -> FETCH_HEAD
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
---
Am 24.05.2017 um 07:45 schrieb Johannes Sixt:
Show 6 quoted lines
> Am 24.05.2017 um 00:08 schrieb Junio C Hamano:
>> So in short:
>>
>>   (1) Hannes's patches are good, but they solve a problem that is
>>       different from what their log messages say; the log message
>>       needs to be updated;

I do not resend patch 1/2 as it is unchanged in all regards. This 2/2 changes the justification; patch text is unchanged.

 remote.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/remote.c b/remote.c
index ad6c5424ed..1949882c10 100644
--- a/remote.c
+++ b/remote.c
@@ -645,7 +645,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)
-- 
2.13.0.55.g17b7d13330
Previous: Johannes SixtNext: Junio C Hamano
Message 16 of 19 in “Fix warnings on access of a remote with Windows paths”
  1. 0/2 Fix warnings on access of a remote with Windows pathsJohannes Sixt, May 20, 2017
  2. 1/2 mingw.h: permit arguments with side effects for is_dir_sepJohannes Sixt, May 20, 2017
  3. Johannes SchindelinMay 22, 2017
  4. 2/2 Windows: do not treat a path with backslashes as a remote's nick nameJohannes Sixt, May 20, 2017
  5. Johannes SchindelinMay 22, 2017
  6. Johannes SchindelinMay 22, 2017
  7. Johannes SixtMay 22, 2017
  8. Johannes SchindelinMay 23, 2017
  9. Johannes SixtMay 23, 2017
  10. stefan.naewe@atlas-elektronik.comMay 22, 2017
  11. Johannes SchindelinMay 22, 2017
  12. Johannes SixtMay 22, 2017
  13. Johannes SchindelinMay 23, 2017
  14. Junio C HamanoMay 23, 2017
  15. Johannes SixtMay 24, 2017
  16. 2/2 Windows: do not treat a path with backslashes as a remote's nick nameJohannes Sixt, May 25, 2017
  17. Junio C HamanoMay 25, 2017
  18. 1/2 mingw.h: permit arguments with side effects for is_dir_sepJohannes Sixt, May 22, 2017
  19. 2/2 Windows: do not treat a path with backslashes as a remote's nick nameJohannes Sixt, May 22, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.