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

[PATCH] Avoid interpreting too-long parameter as file name

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Feb 8, 2016, 05:16 UTC
Message-ID
<1454908588-22475-1-git-send-email-pclouds@gmail.com>
In-Reply-To
<alpine.DEB.2.20.1602071317330.2964@virtualbox>

Even if it is easier to write HEAD~2000, it is legal to write HEAD^^^... (repeats "^" 2000 times in total). However, such a string is too long to be a legal filename (and on Windows, by default even much, much shorter strings are still illegal because they exceed MAX_PATH).

Therefore, if the check_filename() function encounters too long a command-line parameter, it should interpet the error code ENAMETOOLONG as a strong hint that this is not a file name instead of dying with an error message.

Noticed-by: Ole Tange <ole@tange.dk>
Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 Note, git grep ENOENT.*ENOTDIR reveals a couple more matches, but I
 didn't check if they should receive the same treatment.
 Another option is just use file_exists() here instead, but I guess
 that's too relaxing.
 setup.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/setup.c b/setup.c
index 2c4b22c..ab8f85d 100644
--- a/setup.c
+++ b/setup.c
@@ -147,7 +147,7 @@ int check_filename(const char *prefix, const char *arg)
 		name = arg;
 	if (!lstat(name, &st))
 		return 1; /* file exists */
-	if (errno == ENOENT || errno == ENOTDIR)
+	if (errno == ENOENT || errno == ENOTDIR || errno == ENAMETOOLONG)
 		return 0; /* file does not exist */
 	die_errno("failed to stat '%s'", arg);
 }
-- 
2.7.0.377.g4cd97dd
Previous: Johannes SchindelinNext: Junio C Hamano
Message 4 of 6 in “git diff HEAD^(255) fails”
  1. Ole TangeFeb 6, 2016
  2. setup.c: make check_filename() return 0 on ENAMETOOLONGNguyễn Thái Ngọc Duy, Feb 6, 2016
  3. Johannes SchindelinFeb 7, 2016
  4. Avoid interpreting too-long parameter as file nameNguyễn Thái Ngọc Duy, Feb 8, 2016
  5. Junio C HamanoFeb 8, 2016
  6. Kevin DaudtFeb 23, 2016

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.