Fix #786: memccpy() detects buffer overlap on macOS

This commit is contained in:
Arun Prakash Jana 2020-11-19 09:37:18 +05:30
parent 8735f11c58
commit a443a321ef
No known key found for this signature in database
GPG Key ID: A75979F35C080412
1 changed files with 8 additions and 2 deletions

View File

@ -1016,6 +1016,8 @@ static inline bool getutil(char *util)
/* /*
* Updates out with "dir/name or "/name" * Updates out with "dir/name or "/name"
* Returns the number of bytes copied including the terminating NULL byte * Returns the number of bytes copied including the terminating NULL byte
*
* Note: dir and out must be PATH_MAX in length to avoid macOS fault
*/ */
static size_t mkpath(const char *dir, const char *name, char *out) static size_t mkpath(const char *dir, const char *name, char *out)
{ {
@ -4710,10 +4712,14 @@ static bool run_cmd_as_plugin(const char *file, char *runfile, uchar flags)
static bool plctrl_init(void) static bool plctrl_init(void)
{ {
snprintf(g_buf, CMD_LEN_MAX, "nnn-pipe.%d", getpid()); size_t len;
/* g_tmpfpath is used to generate tmp file names */ /* g_tmpfpath is used to generate tmp file names */
g_tmpfpath[tmpfplen - 1] = '\0'; g_tmpfpath[tmpfplen - 1] = '\0';
mkpath(g_tmpfpath, g_buf, g_pipepath); len = xstrsncpy(g_pipepath, g_tmpfpath, TMP_LEN_MAX);
g_pipepath[len - 1] = '/';
len = xstrsncpy(g_pipepath + len, "nnn-pipe.", TMP_LEN_MAX - len) + len;
xstrsncpy(g_pipepath + len - 1, xitoa(getpid()), TMP_LEN_MAX - len);
setenv(env_cfg[NNN_PIPE], g_pipepath, TRUE); setenv(env_cfg[NNN_PIPE], g_pipepath, TRUE);
return EXIT_SUCCESS; return EXIT_SUCCESS;