PR29647, objdump -S looping
authorAlan Modra <amodra@gmail.com>
Wed, 5 Oct 2022 00:55:26 +0000 (11:25 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 5 Oct 2022 04:23:41 +0000 (14:53 +1030)
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.

binutils/objdump.c

index 6610906f83eb330d6f8f6ce5610119c07dabca39..f7b4695c3e8dae58c05a2bd70a5ba5fe2b5d994d 100644 (file)
@@ -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++;