diff options
author | Alan Modra <amodra@gmail.com> | 2022-10-05 11:25:26 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2022-10-05 14:53:41 +1030 |
commit | 306253b2cfa297c1eb0d30852bdcf96375db24e2 (patch) | |
tree | 6c66f35fb031abbe46e57c4668f8df6eddcdc42f | |
parent | 011a13613403c42717c623b0c5fc1e69de9f65b5 (diff) | |
download | binutils-gdb-306253b2cfa297c1eb0d30852bdcf96375db24e2.tar.gz |
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.
-rw-r--r-- | binutils/objdump.c | 5 |
1 files changed, 3 insertions, 2 deletions
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++; |