From: Junio C Hamano Date: Fri, 10 Jan 2014 18:32:18 +0000 (-0800) Subject: Merge branch 'ap/path-max' X-Git-Tag: v1.9-rc0~40 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/273c54f82ca6bfd1f05be3bf8961c55ba60f16e5?hp=-c Merge branch 'ap/path-max' * ap/path-max: Prevent buffer overflows when path is too long --- 273c54f82ca6bfd1f05be3bf8961c55ba60f16e5 diff --combined abspath.c index 8b3385a777,9c908e395b..ca33558a91 --- a/abspath.c +++ b/abspath.c @@@ -143,7 -143,7 +143,7 @@@ static const char *real_path_internal(c error_out: free(last_elem); if (*cwd && chdir(cwd)) - die_errno ("Could not change back to '%s'", cwd); + die_errno("Could not change back to '%s'", cwd); return retval; } @@@ -215,23 -215,25 +215,25 @@@ const char *absolute_path(const char *p */ 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; }