aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--elf/dl-error.c19
2 files changed, 20 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index df657d5d9d..5295a7f61c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 959e1de202..1c6de64275 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