ubsan: aarch64: left shift of negative value
[deliverable/binutils-gdb.git] / bfd / vms-lib.c
index 1b2e22eedbe6011a2e0b22aa3c8afb1369e3bf6e..43addd46ecf9c6a38dd58f1cf46de235e4b77d3a 100644 (file)
@@ -1,6 +1,6 @@
 /* BFD back-end for VMS archive files.
 
-   Copyright (C) 2010-2017 Free Software Foundation, Inc.
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
    Written by Tristan Gingold <gingold@adacore.com>, AdaCore.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -1297,7 +1297,9 @@ _bfd_vms_lib_get_module (bfd *abfd, unsigned int modidx)
   struct lib_tdata *tdata = bfd_libdata (abfd);
   bfd *res;
   file_ptr file_off;
-  char *name;
+  const char *name;
+  char *newname;
+  size_t namelen;
 
   /* Sanity check.  */
   if (modidx >= tdata->nbr_modules)
@@ -1335,18 +1337,22 @@ _bfd_vms_lib_get_module (bfd *abfd, unsigned int modidx)
       if (bfd_bread (buf, tdata->mhd_size, abfd) != tdata->mhd_size)
        return NULL;
 
+      mhd = (struct vms_mhd *) buf;
+      if (mhd->id != MHD__C_MHDID)
+       return NULL;
+
       res = _bfd_create_empty_archive_element_shell (abfd);
       if (res == NULL)
        return NULL;
       arelt = bfd_zmalloc (sizeof (*arelt));
       if (arelt == NULL)
-       return NULL;
+       {
+         bfd_close (res);
+         return NULL;
+       }
       res->arelt_data = arelt;
 
       /* Get info from mhd.  */
-      mhd = (struct vms_mhd *)buf;
-      if (mhd->id != MHD__C_MHDID)
-       return NULL;
       if (tdata->mhd_size >= offsetof (struct vms_mhd, objstat) + 1)
        res->selective_search = (mhd->objstat & MHD__M_SELSRC) ? 1 : 0;
       res->mtime = vms_rawtime_to_time_t (mhd->datim);
@@ -1361,23 +1367,25 @@ _bfd_vms_lib_get_module (bfd *abfd, unsigned int modidx)
 
   /* Set filename.  */
   name = tdata->modules[modidx].name;
+  namelen = strlen (name);
+  newname = bfd_malloc (namelen + 4 + 1);
+  if (newname == NULL)
+    {
+      bfd_close (res);
+      return NULL;
+    }
+  strcpy (newname, name);
   switch (tdata->type)
     {
     case LBR__C_TYP_IOBJ:
     case LBR__C_TYP_EOBJ:
       /* For object archives, append .obj to mimic standard behaviour.  */
-      {
-       size_t namelen = strlen (name);
-       char *name1 = bfd_alloc (res, namelen + 4 + 1);
-       memcpy (name1, name, namelen);
-       strcpy (name1 + namelen, ".obj");
-       name = name1;
-      }
+      strcpy (newname + namelen, ".obj");
       break;
     default:
       break;
     }
-  res->filename = xstrdup (name);
+  bfd_set_filename (res, newname);
 
   tdata->cache[modidx] = res;
 
@@ -2330,12 +2338,24 @@ const bfd_target alpha_vms_lib_txt_vec =
   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
   bfd_getl32, bfd_getl_signed_32, bfd_putl32,
   bfd_getl16, bfd_getl_signed_16, bfd_putl16,
-
-  {_bfd_dummy_target, _bfd_dummy_target,       /* bfd_check_format.  */
-   _bfd_vms_lib_txt_archive_p, _bfd_dummy_target},
-  {bfd_false, bfd_false, bfd_false, bfd_false},        /* bfd_set_format.  */
-  {bfd_false, bfd_false, bfd_false, bfd_false},        /* bfd_write_contents.  */
-
+  {                            /* bfd_check_format.  */
+    _bfd_dummy_target,
+    _bfd_dummy_target,
+    _bfd_vms_lib_txt_archive_p,
+    _bfd_dummy_target
+  },
+  {                            /* bfd_set_format.  */
+    _bfd_bool_bfd_false_error,
+    _bfd_bool_bfd_false_error,
+    _bfd_bool_bfd_false_error,
+    _bfd_bool_bfd_false_error
+  },
+  {                            /* bfd_write_contents.  */
+    _bfd_bool_bfd_false_error,
+    _bfd_bool_bfd_false_error,
+    _bfd_bool_bfd_false_error,
+    _bfd_bool_bfd_false_error
+  },
   BFD_JUMP_TABLE_GENERIC (_bfd_generic),
   BFD_JUMP_TABLE_COPY (_bfd_generic),
   BFD_JUMP_TABLE_CORE (_bfd_nocore),
This page took 0.024923 seconds and 4 git commands to generate.