diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 69e426e0e62..476712e6cba 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2020-01-06 Shahab Vahedi + + * tui/tui-disasm.c (tui_disasm_window::addr_is_displayed): Avoid + overflow by an early check of content vs threshold. + * tui/tui-source.c (tui_source_window::line_is_displayed): + Likewise. + 2020-01-06 Eli Zaretskii * NEWS: Mention the recent fix of $_exitsignal on MS-Windows. diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c index ebd0ba317f5..98c691f3387 100644 --- a/gdb/tui/tui-disasm.c +++ b/gdb/tui/tui-disasm.c @@ -348,19 +348,17 @@ tui_disasm_window::location_matches_p (struct bp_location *loc, int line_no) bool tui_disasm_window::addr_is_displayed (CORE_ADDR addr) const { - bool is_displayed = false; - int threshold = SCROLL_THRESHOLD; + if (content.size () < SCROLL_THRESHOLD) + return false; - int i = 0; - while (i < content.size () - threshold && !is_displayed) + for (size_t i = 0; i < content.size () - SCROLL_THRESHOLD; ++i) { - is_displayed - = (content[i].line_or_addr.loa == LOA_ADDRESS - && content[i].line_or_addr.u.addr == addr); - i++; + if (content[i].line_or_addr.loa == LOA_ADDRESS + && content[i].line_or_addr.u.addr == addr) + return true; } - return is_displayed; + return false; } void diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index e028b724d23..1503cd4c636 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -174,18 +174,17 @@ tui_source_window::location_matches_p (struct bp_location *loc, int line_no) bool tui_source_window::line_is_displayed (int line) const { - bool is_displayed = false; - int threshold = SCROLL_THRESHOLD; - int i = 0; - while (i < content.size () - threshold && !is_displayed) + if (content.size () < SCROLL_THRESHOLD) + return false; + + for (size_t i = 0; i < content.size () - SCROLL_THRESHOLD; ++i) { - is_displayed - = (content[i].line_or_addr.loa == LOA_LINE - && content[i].line_or_addr.u.line_no == line); - i++; + if (content[i].line_or_addr.loa == LOA_LINE + && content[i].line_or_addr.u.line_no == line) + return true; } - return is_displayed; + return false; } void