memory leak in display_debug_addr

Message ID ZW7V9LkM3AXhJC6v@squeak.grove.modra.org
State New
Headers
Series memory leak in display_debug_addr |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm warning Patch is already merged
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 warning Patch is already merged

Commit Message

Alan Modra Dec. 5, 2023, 7:49 a.m. UTC
  * dwarf.c (display_debug_addr): Free dummy debug_addr_info entry.
	Don't return without freeing debug_addr_info on error paths.
  

Patch

diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index 47eadfd1c67..15046909bd0 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -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.  */