mcexec: Fix LD_PRELOAD string manipulation (again)

Fixes: 8cf70900 "mcexec: Fix LD_PRELOAD string manipulation"
Change-Id: I6e0188bd60f8e3977beb22c1f9212baf37f37093
This commit is contained in:
Masamichi Takagi
2020-04-19 14:38:17 +09:00
parent 2e2e973d78
commit 16a6a1d08b

View File

@@ -1847,17 +1847,22 @@ opendev()
return fd; return fd;
} }
#define LD_PRELOAD_PREPARE(name) do { \ #define LD_PRELOAD_PREPARE(name) do { \
int n = 0;\ int n = 0; \
\ \
n += snprintf(elembuf, PATH_MAX, "%s", nelem > 0 ? ":" : ""); \ if (1 + strnlen(libdir, PATH_MAX) + 1 + \
strncat(elembuf, libdir, PATH_MAX - n); \ strnlen(name, PATH_MAX) + 1 > PATH_MAX) { \
n = n + strlen(libdir) > PATH_MAX ? \ fprintf(stderr, \
PATH_MAX : n + strlen(libdir); \ "%s: warning: LD_PRELOAD path is too long\n", \
strncat(elembuf, "/", PATH_MAX - n); \ __func__); \
n = n + 1 > PATH_MAX ? PATH_MAX : n + 1; \ return; \
strncat(elembuf, name, PATH_MAX - n); \ } \
} while (0) if (nelem > 0) \
n += snprintf(elembuf, PATH_MAX, ":"); \
n += snprintf(elembuf + n, PATH_MAX - n - 1, libdir); \
n += snprintf(elembuf + n, PATH_MAX - n - 1, "/"); \
n += snprintf(elembuf + n, PATH_MAX - n - 1, name); \
} while (0)
#define LD_PRELOAD_APPEND do { \ #define LD_PRELOAD_APPEND do { \
if (strlen(elembuf) + 1 > remainder) { \ if (strlen(elembuf) + 1 > remainder) { \