From 6315bd76d0484d0800fbb6f3a9851932262c1fbc Mon Sep 17 00:00:00 2001 From: graydon Date: Thu, 1 Sep 2005 01:53:33 +0000 Subject: 2005-08-31 Graydon Hoare * tapsets.cxx (dwflpp::iterate_over_srcfile_lines): Correct segv reported in PR 1270. --- ChangeLog | 5 +++++ tapsets.cxx | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index c92c77f2..6370dbae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-08-31 Graydon Hoare + + * tapsets.cxx (dwflpp::iterate_over_srcfile_lines): Correct segv + reported in PR 1270. + 2005-08-31 Frank Ch. Eigler * 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); } -- cgit