From a43678e31144d760b7bda2b32e0a74e3909b6faf Mon Sep 17 00:00:00 2001 From: Nikita Smith Date: Mon, 21 Oct 2024 13:26:25 -0700 Subject: [PATCH] voff -> line search fix when line table contains duplicate virtual offsets we have to return index of last virtual offset so following property is true: 'line_length = virtual_offsets[index + 1] - virtual_offsets[index]' --- src/lib_rdi_format/rdi_format_parse.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib_rdi_format/rdi_format_parse.c b/src/lib_rdi_format/rdi_format_parse.c index ab371fec..b396f76a 100644 --- a/src/lib_rdi_format/rdi_format_parse.c +++ b/src/lib_rdi_format/rdi_format_parse.c @@ -303,9 +303,9 @@ rdi_line_info_idx_from_voff(RDI_ParsedLineTable *line_info, RDI_U64 voff) { RDI_U64 count = 0; RDI_U64 result = rdi_line_info_idx_range_from_voff(line_info, voff, &count); - for(RDI_U64 idx = 0; idx < count && result+idx < line_info->count; idx += 1) + for(RDI_S64 idx = count-1; idx >= 0; idx -= 1) { - if(line_info->lines[result+idx].file_idx != 0) + if(result + idx < line_info->count && line_info->lines[result+idx].file_idx != 0) { result += idx; break;