aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--sysdeps/generic/elf/backtracesyms.c8
2 files changed, 8 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 7ce8be06e6..224d5fcd65 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2001-01-09 Ulrich Drepper <drepper@redhat.com>
+ * sysdeps/generic/elf/backtracesyms.c (__backtrace_symbols):
+ Minimal cleanups. Add assert to ensure memory handling is correct.
+
* manual/conf.texi (File Minimums): Fix _POSIX_PATH_MAX value.
Reported by Ben Collins <bcollins@debian.org>.
diff --git a/sysdeps/generic/elf/backtracesyms.c b/sysdeps/generic/elf/backtracesyms.c
index 0419773d40..2f6208fb8e 100644
--- a/sysdeps/generic/elf/backtracesyms.c
+++ b/sysdeps/generic/elf/backtracesyms.c
@@ -1,5 +1,5 @@
/* Return list with names for address in backtrace.
- Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -18,6 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <assert.h>
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>
@@ -50,7 +51,7 @@ __backtrace_symbols (array, size)
status[cnt] = _dl_addr (array[cnt], &info[cnt]);
if (status[cnt] && info[cnt].dli_fname && info[cnt].dli_fname[0] != '\0')
/* We have some info, compute the length of the string which will be
- "<fct-name>(<sym-name>)[+offset]. */
+ "<file-name>(<sym-name>) [+offset]. */
total += (strlen (info[cnt].dli_fname ?: "")
+ (info[cnt].dli_sname
? strlen (info[cnt].dli_sname) + 3 + WORD_WIDTH + 3
@@ -61,7 +62,7 @@ __backtrace_symbols (array, size)
}
/* Allocate memory for the result. */
- result = malloc (size * sizeof (char *) + total);
+ result = (char **) malloc (size * sizeof (char *) + total);
if (result != NULL)
{
char *last = (char *) (result + size);
@@ -93,6 +94,7 @@ __backtrace_symbols (array, size)
else
last += 1 + sprintf (last, "[%p]", array[cnt]);
}
+ assert (last <= (char *) result + size * sizeof (char *) + total);
}
return result;