From 4ca0333f073cb4d86fe9d4e64c9dfdca5deba1e0 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 22 Aug 2016 14:16:26 +0100 Subject: [PATCH] Prevent a seg-fault in gprof when parsing a corrupt core file. PR gprof/20499 * corefile.c (core_create_syms_from): Avoid walking off the end of the symbol table. --- gprof/ChangeLog | 6 ++++++ gprof/corefile.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/gprof/ChangeLog b/gprof/ChangeLog index 83e8d1706b9..eabc188ca38 100644 --- a/gprof/ChangeLog +++ b/gprof/ChangeLog @@ -1,3 +1,9 @@ +2016-08-22 Nick Clifton + + PR gprof/20499 + * corefile.c (core_create_syms_from): Avoid walking off the end of + the symbol table. + 2016-07-21 H.J. Lu * configure: Regenerated. diff --git a/gprof/corefile.c b/gprof/corefile.c index 37942b564ad..93a0e94e554 100644 --- a/gprof/corefile.c +++ b/gprof/corefile.c @@ -553,6 +553,13 @@ core_create_syms_from (const char * sym_table_file) if (type != 't' && type != 'T') continue; + /* PR 20499 */ + if ((symtab.limit - symtab.base) >= symtab.len) + { + fprintf (stderr, _("%s: too many symbols in file '%s'\n"), whoami, sym_table_file); + done (1); + } + sym_init (symtab.limit); sscanf (address, "%" BFD_VMA_FMT "x", &(symtab.limit->addr) ); -- 2.30.2