When printing the GNU DebugFission location entries we want to print the start idx as begin, if we cannot find the address index. A copy/paste error set up end instead of begin in that case causing us to print garbage (in the unlikely event the .debug_addr table wasn't found for this entry).
Signed-off-by: Mark Wielaard <m...@klomp.org> --- src/ChangeLog | 5 +++++ src/readelf.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 1bb5696..ec07bb1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2018-06-05 Mark Wielaard <m...@klomp.org> + * readelf.c (print_debug_loc_section): Set begin to idx when failing + to read the start address if DW_LLE_GNU_start_end_entry. + +2018-06-05 Mark Wielaard <m...@klomp.org> + * readelf.c (handle_sysv_hash): Don't leak lengths array when detecting an invalid chain. (handle_sysv_hash64): Likewise. diff --git a/src/readelf.c b/src/readelf.c index ce959b3..eaeb70c 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -9355,7 +9355,7 @@ print_debug_loc_section (Dwfl_Module *dwflmod, goto invalid_data; get_uleb128 (idx, locp, locendp); if (get_indexed_addr (cu, idx, &begin) != 0) - end = idx; /* ... */ + begin = idx; /* ... */ if (locp >= locendp) goto invalid_data; get_uleb128 (idx, locp, locendp); -- 1.8.3.1