[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