diff options
author | graydon <graydon> | 2005-09-01 01:53:33 +0000 |
---|---|---|
committer | graydon <graydon> | 2005-09-01 01:53:33 +0000 |
commit | 6315bd76d0484d0800fbb6f3a9851932262c1fbc (patch) | |
tree | e03a142d377d518e4d61a0e34b493cdff9b5708d /tapsets.cxx | |
parent | 1cc6d2e8019cfc6f8ef989063ebde929601439f5 (diff) | |
download | systemtap-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.
Diffstat (limited to 'tapsets.cxx')
-rw-r--r-- | tapsets.cxx | 18 |
1 files changed, 13 insertions, 5 deletions
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); } |