diff options
author | Junio C Hamano <gitster@pobox.com> | 2014-01-10 10:32:18 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-01-10 10:32:18 -0800 |
commit | 273c54f82ca6bfd1f05be3bf8961c55ba60f16e5 (patch) | |
tree | 76cf71a350cce0307b800367985f4025813d8423 /abspath.c | |
parent | b0504a95193504b9d37ef8f01b5b2403e345ee89 (diff) | |
parent | fc2b6214542a46f97d7067b2f7df530ed37737a7 (diff) | |
download | git-273c54f82ca6bfd1f05be3bf8961c55ba60f16e5.tar.gz |
Merge branch 'ap/path-max'
* ap/path-max:
Prevent buffer overflows when path is too long
Diffstat (limited to 'abspath.c')
-rw-r--r-- | abspath.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -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; } |