objcopy memory leaks after errors
authorAlan Modra <amodra@gmail.com>
Tue, 6 Jun 2023 00:20:56 +0000 (09:50 +0930)
committerAlan Modra <amodra@gmail.com>
Wed, 7 Jun 2023 01:35:11 +0000 (11:05 +0930)
These aren't important at all, but tidy them in case they obscure
other more important leaks.

* objcopy (copy_file): Close input bfd after errors.

binutils/objcopy.c

index ac40da87018c5edee0b2e0e3d419c02fa0478746..414007780a8c98f5d9803a445846e95bb9cb3703 100644 (file)
@@ -3821,6 +3821,8 @@ copy_file (const char *input_filename, const char *output_filename, int ofd,
   if (ibfd == NULL || bfd_stat (ibfd, in_stat) != 0)
     {
       bfd_nonfatal_message (input_filename, NULL, NULL, NULL);
+      if (ibfd != NULL)
+       bfd_close (ibfd);
       status = 1;
       return;
     }
@@ -3890,6 +3892,7 @@ copy_file (const char *input_filename, const char *output_filename, int ofd,
        {
          close (ofd);
          bfd_nonfatal_message (output_filename, NULL, NULL, NULL);
+         bfd_close (ibfd);
          status = 1;
          return;
        }
@@ -3922,6 +3925,7 @@ copy_file (const char *input_filename, const char *output_filename, int ofd,
        {
          close (ofd);
          bfd_nonfatal_message (output_filename, NULL, NULL, NULL);
+         bfd_close (ibfd);
          status = 1;
          return;
        }
@@ -3970,6 +3974,7 @@ copy_file (const char *input_filename, const char *output_filename, int ofd,
       if (core_error == bfd_error_file_ambiguously_recognized)
        list_matching_formats (core_matching);
 
+      bfd_close (ibfd);
       status = 1;
     }
 }