diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | elf/dl-error.c | 19 |
2 files changed, 20 insertions, 4 deletions
@@ -1,3 +1,8 @@ +2000-10-15 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-error.c (_dl_signal_error): Allocate memory for objname + as well. Reported by Alexander V. Lukyanov <lav@yars.free.net>. + 2000-10-13 Andreas Schwab <schwab@suse.de> * elf/elf.h (R_IA64_PCREL60B): Add relocation. diff --git a/elf/dl-error.c b/elf/dl-error.c index 959e1de..1c6de64 100644 --- a/elf/dl-error.c +++ b/elf/dl-error.c @@ -76,10 +76,21 @@ _dl_signal_error (int errcode, const char *objname, const char *errstring) /* We are inside _dl_catch_error. Return to it. We have to duplicate the error string since it might be allocated on the stack. The object name is always a string constant. */ - lcatch->objname = objname; - lcatch->errstring = strdup (errstring); - if (lcatch->errstring == NULL) - lcatch->errstring = _dl_out_of_memory; + size_t len_objname = strlen (objname) + 1; + size_t len_errstring = strlen (errstring) + 1; + + lcatch->errstring = (char *) malloc (len_objname + len_errstring); + if (lcatch->errstring != NULL) + /* Make a copy of the object file name and the error string. */ + lcatch->objname = memcpy (__mempcpy ((char *) lcatch->errstring, + errstring, len_errstring), + objname, len_objname); + else + { + /* This is better than nothing. */ + lcatch->objname = objname; + lcatch->errstring = _dl_out_of_memory; + } longjmp (lcatch->env, errcode ?: -1); } else |