summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgraydon <graydon>2005-09-01 01:53:33 +0000
committergraydon <graydon>2005-09-01 01:53:33 +0000
commit6315bd76d0484d0800fbb6f3a9851932262c1fbc (patch)
treee03a142d377d518e4d61a0e34b493cdff9b5708d
parent1cc6d2e8019cfc6f8ef989063ebde929601439f5 (diff)
downloadsystemtap-steved-6315bd76d0484d0800fbb6f3a9851932262c1fbc.tar.gz
systemtap-steved-6315bd76d0484d0800fbb6f3a9851932262c1fbc.tar.xz
systemtap-steved-6315bd76d0484d0800fbb6f3a9851932262c1fbc.zip
2005-08-31 Graydon Hoare <graydon@redhat.com>
* tapsets.cxx (dwflpp::iterate_over_srcfile_lines): Correct segv reported in PR 1270.
-rw-r--r--ChangeLog5
-rw-r--r--tapsets.cxx18
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 <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);
}