diff options
Diffstat (limited to 'elf/dl-object.c')
-rw-r--r-- | elf/dl-object.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/elf/dl-object.c b/elf/dl-object.c index ed78b47127..eee9deb3d2 100644 --- a/elf/dl-object.c +++ b/elf/dl-object.c @@ -121,11 +121,16 @@ _dl_new_object (char *realname, const char *libname, int type, origin = NULL; do { + char *new_origin; + len += 128; - origin = (char *) realloc (origin, len); + new_origin = (char *) realloc (origin, len); + if (new_origin == NULL) + /* We exit the loop. Note that result == NULL. */ + break; + origin = new_origin; } - while (origin != NULL - && (result = __getcwd (origin, len - realname_len)) == NULL + while ((result = __getcwd (origin, len - realname_len)) == NULL && errno == ERANGE); if (result == NULL) |