diff options
Diffstat (limited to 'ldso')
-rw-r--r-- | ldso/dynlink.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/ldso/dynlink.c b/ldso/dynlink.c index 33802400..3741c30d 100644 --- a/ldso/dynlink.c +++ b/ldso/dynlink.c @@ -807,7 +807,16 @@ static int fixup_rpath(struct dso *p, char *buf, size_t buf_size) origin = p->name; } t = strrchr(origin, '/'); - l = t ? t-origin : 0; + if (t) { + l = t-origin; + } else { + /* Normally p->name will always be an absolute or relative + * pathname containing at least one '/' character, but in the + * case where ldso was invoked as a command to execute a + * program in the working directory, app.name may not. Fix. */ + origin = "."; + l = 1; + } p->rpath = malloc(strlen(p->rpath_orig) + n*l + 1); if (!p->rpath) return -1; |