]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
memory leak in display_debug_addr
authorAlan Modra <amodra@gmail.com>
Tue, 5 Dec 2023 06:01:38 +0000 (16:31 +1030)
committerAlan Modra <amodra@gmail.com>
Tue, 5 Dec 2023 07:50:51 +0000 (18:20 +1030)
* dwarf.c (display_debug_addr): Free dummy debug_addr_info entry.
Don't return without freeing debug_addr_info on error paths.

binutils/dwarf.c

index 47eadfd1c672679f6ffe05463a30e671afd7dbaa..15046909bd09df567ccd564b550212c75d9cc2e2 100644 (file)
@@ -7864,9 +7864,9 @@ display_debug_addr (struct dwarf_section *section,
 
          if (header_size != 8 && header_size != 16)
            {
-             warn (_("Corrupt %s section: expecting header size of 8 or 16, but found %zd instead\n"),
+             warn (_("Corrupt %s section: expecting header size of 8 or 16, but found %zd instead"),
                    section->name, header_size);
-             return 0;
+             break;
            }
 
          SAFE_BYTE_GET_AND_INC (length, curr_header, 4, entry);
@@ -7876,8 +7876,8 @@ display_debug_addr (struct dwarf_section *section,
              || length < (size_t) (entry - curr_header))
            {
              warn (_("Corrupt %s section: unit_length field of %#" PRIx64
-                     " is invalid\n"), section->name, length);
-             return 0;
+                     " is invalid"), section->name, length);
+             break;
            }
          end = curr_header + length;
          SAFE_BYTE_GET_AND_INC (version, curr_header, 2, entry);
@@ -7899,7 +7899,7 @@ display_debug_addr (struct dwarf_section *section,
        {
          warn (_("Corrupt %s section: address size (%x) is wrong"),
                section->name, address_size);
-         return 0;
+         break;
        }
 
       while ((size_t) (end - entry) >= address_size)
@@ -7914,8 +7914,9 @@ display_debug_addr (struct dwarf_section *section,
     }
   printf ("\n");
 
+  free (debug_addr_info[count]);
   free (debug_addr_info);
-  return 1;
+  return i == count;
 }
 
 /* Display the .debug_str_offsets and .debug_str_offsets.dwo sections.  */