Make sure preload library path is absolute. This fixes issues where a chdir is followed by a process fork, which can cause the library to not be found.

pull/257/head
crass 2018-09-01 05:16:37 -05:00
parent ce4c71078e
commit 369f92670c
1 changed files with 10 additions and 2 deletions

View File

@ -131,6 +131,14 @@ int main(int argc, char *argv[]) {
if(!quiet)
fprintf(stderr, LOG_PREFIX "preloading %s/%s\n", prefix, dll_name);
snprintf(path=pbuf, sizeof(pbuf), "%s/%s", prefix, dll_name);
if (path[0] != '/'){
path = realpath(path, NULL);
snprintf(pbuf, sizeof(pbuf), "%s", path);
free(path);
path = pbuf;
}
#ifdef IS_MAC
putenv("DYLD_FORCE_FLAT_NAMESPACE=1");
#define LD_PRELOAD_ENV "DYLD_INSERT_LIBRARIES"
@ -143,8 +151,8 @@ int main(int argc, char *argv[]) {
#define LD_PRELOAD_SEP " "
#endif
char *old_val = getenv(LD_PRELOAD_ENV);
snprintf(buf, sizeof(buf), LD_PRELOAD_ENV "=%s/%s%s%s",
prefix, dll_name,
snprintf(buf, sizeof(buf), LD_PRELOAD_ENV "=%s%s%s",
path,
/* append previous LD_PRELOAD content, if existent */
old_val ? LD_PRELOAD_SEP : "",
old_val ? old_val : "");