diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | tapsets.cxx | 18 |
2 files changed, 18 insertions, 5 deletions
@@ -1,3 +1,8 @@ +2005-08-31 Graydon Hoare <graydon@redhat.com> + + * tapsets.cxx (dwflpp::iterate_over_srcfile_lines): Correct segv + reported in PR 1270. + 2005-08-31 Frank Ch. Eigler <fche@redhat.com> * translate.cxx (visit_array_in, visit_arrayindex): Use write locks diff --git a/tapsets.cxx b/tapsets.cxx index 4d44fb03..ec168ae9 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -547,8 +547,8 @@ dwflpp void (* callback) (Dwarf_Line * line, void * arg), void *data) { - Dwarf_Line **srcsp; - size_t nsrcs; + Dwarf_Line **srcsp = NULL; + size_t nsrcs = 0; get_module_dwarf(); @@ -556,11 +556,19 @@ dwflpp dwarf_getsrc_file (module_dwarf, srcfile, lineno, 0, &srcsp, &nsrcs)); - - for (size_t i = 0; i < nsrcs; ++i) + try { - callback (srcsp[i], data); + for (size_t i = 0; i < nsrcs; ++i) + { + callback (srcsp[i], data); + } } + catch (...) + { + free (srcsp); + throw; + } + free (srcsp); } |