* vms-lib.c (_bfd_vms_lib_get_module): Use bfd_zmalloc for
authorTom Tromey <tromey@redhat.com>
Mon, 20 Aug 2012 14:32:31 +0000 (14:32 +0000)
committerTom Tromey <tromey@redhat.com>
Mon, 20 Aug 2012 14:32:31 +0000 (14:32 +0000)
areltdata.
* opncls.c (_bfd_delete_bfd): Free arelt_data.
* mach-o.c (bfd_mach_o_fat_member_init): Use bfd_zmalloc for
areltdata.
* ecoff.c (_bfd_ecoff_slurp_armap): Use free for mapdata.
* coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Use bfd_zmalloc for
areltdata.
(xcoff_write_archive_contents_old): Likewise.
(xcoff_write_archive_contents_big): Likewise.
* archive64.c (bfd_elf64_archive_slurp_armap): Use free for
areltdata.
* archive.c (_bfd_generic_read_ar_hdr_mag): Use bfd_zmalloc and
free for areltdata.
(_bfd_get_elt_at_filepos): Likewise.  Clear n_nfd->arelt_data on
failure.
(do_slurp_bsd_armap): Use bfd_zmalloc and free for areltdata.
(do_slurp_coff_armap): Likewise.
(_bfd_slurp_extended_name_table): Likewise.
(bfd_slurp_bsd_armap_f2): Likewise.  Don't leak 'mapdata'.

bfd/ChangeLog
bfd/archive.c
bfd/archive64.c
bfd/coff-rs6000.c
bfd/ecoff.c
bfd/mach-o.c
bfd/opncls.c
bfd/vms-lib.c

index 1716b7c0f522d26db39db05c704fbb6f3c1f25ea..92aac79eaa6c156ac7e51f368d261f6032dca997 100644 (file)
@@ -1,3 +1,26 @@
+2012-08-20  Tom Tromey  <tromey@redhat.com>
+
+       * vms-lib.c (_bfd_vms_lib_get_module): Use bfd_zmalloc for
+       areltdata.
+       * opncls.c (_bfd_delete_bfd): Free arelt_data.
+       * mach-o.c (bfd_mach_o_fat_member_init): Use bfd_zmalloc for
+       areltdata.
+       * ecoff.c (_bfd_ecoff_slurp_armap): Use free for mapdata.
+       * coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Use bfd_zmalloc for
+       areltdata.
+       (xcoff_write_archive_contents_old): Likewise.
+       (xcoff_write_archive_contents_big): Likewise.
+       * archive64.c (bfd_elf64_archive_slurp_armap): Use free for
+       areltdata.
+       * archive.c (_bfd_generic_read_ar_hdr_mag): Use bfd_zmalloc and
+       free for areltdata.
+       (_bfd_get_elt_at_filepos): Likewise.  Clear n_nfd->arelt_data on
+       failure.
+       (do_slurp_bsd_armap): Use bfd_zmalloc and free for areltdata.
+       (do_slurp_coff_armap): Likewise.
+       (_bfd_slurp_extended_name_table): Likewise.
+       (bfd_slurp_bsd_armap_f2): Likewise.  Don't leak 'mapdata'.
+
 2012-08-17  Nick Clifton  <nickc@redhat.com>
 
        * po/vi.po: Updated Vietnamese translation.
index 2d67e1fb342e3d3d86f19e3d5e334affa47aa06f..8e8fd2de5ca75536a20f8c1c194c2d65ab879fb9 100644 (file)
@@ -517,7 +517,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag)
       parsed_size -= namelen;
       extra_size = namelen;
 
-      allocptr = (char *) bfd_zalloc (abfd, allocsize);
+      allocptr = (char *) bfd_zmalloc (allocsize);
       if (allocptr == NULL)
        return NULL;
       filename = (allocptr
@@ -525,6 +525,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag)
                  + sizeof (struct ar_hdr));
       if (bfd_bread (filename, namelen, abfd) != namelen)
        {
+         free (allocptr);
          if (bfd_get_error () != bfd_error_system_call)
            bfd_set_error (bfd_error_no_more_archived_files);
          return NULL;
@@ -560,7 +561,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag)
 
   if (!allocptr)
     {
-      allocptr = (char *) bfd_zalloc (abfd, allocsize);
+      allocptr = (char *) bfd_zmalloc (allocsize);
       if (allocptr == NULL)
        return NULL;
     }
@@ -643,7 +644,10 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
        {
          filename = _bfd_append_relative_path (archive, filename);
          if (filename == NULL)
-           return NULL;
+           {
+             free (new_areldata);
+             return NULL;
+           }
        }
 
       if (new_areldata->origin > 0)
@@ -655,13 +659,13 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
          if (ext_arch == NULL
              || ! bfd_check_format (ext_arch, bfd_archive))
            {
-             bfd_release (archive, new_areldata);
+             free (new_areldata);
              return NULL;
            }
          n_nfd = _bfd_get_elt_at_filepos (ext_arch, new_areldata->origin);
          if (n_nfd == NULL)
            {
-             bfd_release (archive, new_areldata);
+             free (new_areldata);
              return NULL;
            }
          n_nfd->proxy_origin = bfd_tell (archive);
@@ -683,7 +687,7 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
 
   if (n_nfd == NULL)
     {
-      bfd_release (archive, new_areldata);
+      free (new_areldata);
       return NULL;
     }
 
@@ -707,7 +711,8 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
   if (_bfd_add_bfd_to_archive_cache (archive, filepos, n_nfd))
     return n_nfd;
 
-  bfd_release (archive, new_areldata);
+  free (new_areldata);
+  n_nfd->arelt_data = NULL;
   return NULL;
 }
 
@@ -894,7 +899,7 @@ do_slurp_bsd_armap (bfd *abfd)
   if (mapdata == NULL)
     return FALSE;
   parsed_size = mapdata->parsed_size;
-  bfd_release (abfd, mapdata); /* Don't need it any more.  */
+  free (mapdata);
 
   raw_armap = (bfd_byte *) bfd_zalloc (abfd, parsed_size);
   if (raw_armap == NULL)
@@ -970,7 +975,7 @@ do_slurp_coff_armap (bfd *abfd)
   if (mapdata == NULL)
     return FALSE;
   parsed_size = mapdata->parsed_size;
-  bfd_release (abfd, mapdata); /* Don't need it any more.  */
+  free (mapdata);
 
   if (bfd_bread (int_buf, 4, abfd) != 4)
     {
@@ -1063,7 +1068,7 @@ do_slurp_coff_armap (bfd *abfd)
            ardata->first_file_filepos +=
              (tmp->parsed_size + sizeof (struct ar_hdr) + 1) & ~(unsigned) 1;
          }
-       bfd_release (abfd, tmp);
+       free (tmp);
       }
   }
 
@@ -1180,15 +1185,17 @@ bfd_slurp_bsd_armap_f2 (bfd *abfd)
 
   if (mapdata->parsed_size < HPUX_SYMDEF_COUNT_SIZE + BSD_STRING_COUNT_SIZE)
     {
+      free (mapdata);
     wrong_format:
       bfd_set_error (bfd_error_wrong_format);
     byebye:
-      bfd_release (abfd, mapdata);
       return FALSE;
     }
   left = mapdata->parsed_size - HPUX_SYMDEF_COUNT_SIZE - BSD_STRING_COUNT_SIZE;
 
   amt = mapdata->parsed_size;
+  free (mapdata);
+
   raw_armap = (bfd_byte *) bfd_zalloc (abfd, amt);
   if (raw_armap == NULL)
     goto byebye;
@@ -1290,7 +1297,7 @@ _bfd_slurp_extended_name_table (bfd *abfd)
       if (bfd_ardata (abfd)->extended_names == NULL)
        {
        byebye:
-         bfd_release (abfd, namedata);
+         free (namedata);
          return FALSE;
        }
 
@@ -1327,8 +1334,7 @@ _bfd_slurp_extended_name_table (bfd *abfd)
       bfd_ardata (abfd)->first_file_filepos +=
        (bfd_ardata (abfd)->first_file_filepos) % 2;
 
-      /* FIXME, we can't release namedata here because it was allocated
-        below extended_names on the objalloc...  */
+      free (namedata);
     }
   return TRUE;
 }
index f3a13d341ebe3d1674ee207175ed0fe7c13be2d7..db4ce2c1257216de3dcdedf5d659e5c6e9041c4c 100644 (file)
@@ -77,7 +77,7 @@ bfd_elf64_archive_slurp_armap (bfd *abfd)
   if (mapdata == NULL)
     return FALSE;
   parsed_size = mapdata->parsed_size;
-  bfd_release (abfd, mapdata);
+  free (mapdata);
 
   if (bfd_bread (int_buf, 8, abfd) != 8)
     {
index 9326b32bd1bc8320dbf9f42f1feb0d26d7dfb537..edbef95e156d82affc8e2797f24583c43d765c17 100644 (file)
@@ -1496,7 +1496,7 @@ _bfd_xcoff_read_ar_hdr (bfd *abfd)
   struct areltdata *ret;
   bfd_size_type amt = sizeof (struct areltdata);
 
-  ret = (struct areltdata *) bfd_alloc (abfd, amt);
+  ret = (struct areltdata *) bfd_zmalloc (amt);
   if (ret == NULL)
     return NULL;
 
@@ -2113,7 +2113,7 @@ xcoff_write_archive_contents_old (bfd *abfd)
       total_namlen += strlen (normalize_filename (sub)) + 1;
       if (sub->arelt_data == NULL)
        {
-         sub->arelt_data = bfd_zalloc (sub, sizeof (struct areltdata));
+         sub->arelt_data = bfd_zmalloc (sizeof (struct areltdata));
          if (sub->arelt_data == NULL)
            return FALSE;
        }
@@ -2329,7 +2329,7 @@ xcoff_write_archive_contents_big (bfd *abfd)
       if (current_bfd->arelt_data == NULL)
        {
          size = sizeof (struct areltdata);
-         current_bfd->arelt_data = bfd_zalloc (current_bfd, size);
+         current_bfd->arelt_data = bfd_zmalloc (size);
          if (current_bfd->arelt_data == NULL)
            return FALSE;
        }
index 3b65c0eaf723dc4f2cbb5aa9b7b1dd22e211b83e..eaf8ada19dde971ee1223c8feff35b74aea90ae5 100644 (file)
@@ -2904,7 +2904,7 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
   if (mapdata == NULL)
     return FALSE;
   parsed_size = mapdata->parsed_size;
-  bfd_release (abfd, (void *) mapdata);
+  free (mapdata);
 
   raw_armap = (char *) bfd_alloc (abfd, parsed_size);
   if (raw_armap == NULL)
index 84d5a72960f0a009d1504590df596821e1e604a8..0379f4f8e97857b972dd094a71f87c088ce84321 100644 (file)
@@ -4294,7 +4294,7 @@ bfd_mach_o_fat_member_init (bfd *abfd,
       abfd->filename = name;
     }
 
-  areltdata = bfd_zalloc (abfd, sizeof (struct areltdata));
+  areltdata = bfd_zmalloc (sizeof (struct areltdata));
   areltdata->parsed_size = entry->size;
   abfd->arelt_data = areltdata;
   abfd->iostream = NULL;
index b2ed9beb9019460173996a82e6db57ddbe915ae7..fdccba371ecd0cebb6d623d7d11396a2ca84adad 100644 (file)
@@ -136,6 +136,7 @@ _bfd_delete_bfd (bfd *abfd)
       objalloc_free ((struct objalloc *) abfd->memory);
     }
 
+  free (abfd->arelt_data);
   free (abfd);
 }
 
index fa23b788e2509f6caa7303ccd34bba80fdfe436a..56b80ad58ce07dd1a6d8efe33d49ae3f1d131b19 100644 (file)
@@ -1,6 +1,6 @@
 /* BFD back-end for VMS archive files.
 
-   Copyright 2010, 2011 Free Software Foundation, Inc.
+   Copyright 2010, 2011, 2012 Free Software Foundation, Inc.
    Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -1337,7 +1337,7 @@ _bfd_vms_lib_get_module (bfd *abfd, unsigned int modidx)
       res = _bfd_create_empty_archive_element_shell (abfd);
       if (res == NULL)
         return NULL;
-      arelt = bfd_zalloc (res, sizeof (*arelt));
+      arelt = bfd_zmalloc (sizeof (*arelt));
       if (arelt == NULL)
         return NULL;
       res->arelt_data = arelt;