From: Alan Modra Date: Wed, 5 Oct 2022 00:55:26 +0000 (+1030) Subject: PR29647, objdump -S looping X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=306253b2cfa297c1eb0d30852bdcf96375db24e2;p=binutils-gdb.git PR29647, objdump -S looping Fuzzed input with this in .debug_line [0x0000003b] Special opcode 115: advance Address by 8 to 0x401180 and Line by -2 to -1 PR 29647 * objdump.c (print_line): Don't decrement line number here.. (dump_lines): ..do so here instead, ensuring loop terminates. --- diff --git a/binutils/objdump.c b/binutils/objdump.c index 6610906f83e..f7b4695c3e8 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -2069,7 +2069,6 @@ print_line (struct print_file_list *p, unsigned int linenum) const char *l; size_t len; - --linenum; if (linenum >= p->maxline) return; l = p->linemap [linenum]; @@ -2088,7 +2087,9 @@ dump_lines (struct print_file_list *p, unsigned int start, unsigned int end) { if (p->map == NULL) return; - while (start <= end) + if (start != 0) + --start; + while (start < end) { print_line (p, start); start++;