mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Merge branch 'ap/path-max'
* ap/path-max: Prevent buffer overflows when path is too long
This commit is contained in:
16
abspath.c
16
abspath.c
@@ -215,23 +215,25 @@ const char *absolute_path(const char *path)
|
||||
*/
|
||||
const char *prefix_filename(const char *pfx, int pfx_len, const char *arg)
|
||||
{
|
||||
static char path[PATH_MAX];
|
||||
static struct strbuf path = STRBUF_INIT;
|
||||
#ifndef GIT_WINDOWS_NATIVE
|
||||
if (!pfx_len || is_absolute_path(arg))
|
||||
return arg;
|
||||
memcpy(path, pfx, pfx_len);
|
||||
strcpy(path + pfx_len, arg);
|
||||
strbuf_reset(&path);
|
||||
strbuf_add(&path, pfx, pfx_len);
|
||||
strbuf_addstr(&path, arg);
|
||||
#else
|
||||
char *p;
|
||||
/* don't add prefix to absolute paths, but still replace '\' by '/' */
|
||||
strbuf_reset(&path);
|
||||
if (is_absolute_path(arg))
|
||||
pfx_len = 0;
|
||||
else if (pfx_len)
|
||||
memcpy(path, pfx, pfx_len);
|
||||
strcpy(path + pfx_len, arg);
|
||||
for (p = path + pfx_len; *p; p++)
|
||||
strbuf_add(&path, pfx, pfx_len);
|
||||
strbuf_addstr(&path, arg);
|
||||
for (p = path.buf + pfx_len; *p; p++)
|
||||
if (*p == '\\')
|
||||
*p = '/';
|
||||
#endif
|
||||
return path;
|
||||
return path.buf;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user