diff --git a/gprof/ChangeLog b/gprof/ChangeLog index 83e8d1706b..eabc188ca3 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 37942b564a..93a0e94e55 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) );