Tidy up ar_open by using asprintf to replace xmalloc and sprintf.
authorChristos Zoulas <christos@zoulas.com>
Mon, 10 Jun 2019 12:15:23 +0000 (13:15 +0100)
committerNick Clifton <nickc@redhat.com>
Mon, 10 Jun 2019 12:15:23 +0000 (13:15 +0100)
PR 24649
* arsup.c (ar_open): Use asprintf in place of xmalloc and
sprintf.

binutils/ChangeLog
binutils/arsup.c

index c98ed94..b845cac 100644 (file)
@@ -1,3 +1,9 @@
+2019-06-10  Christos Zoulas  <christos@zoulas.com>
+
+       PR 24649
+       * arsup.c (ar_open): Use asprintf in place of xmalloc and
+       sprintf.
+
 2019-06-03  Nick Clifton  <nickc@redhat.com>
 
        Revert:
index 75549bb..0836496 100644 (file)
@@ -149,13 +149,20 @@ maybequit (void)
 void
 ar_open (char *name, int t)
 {
-  char *tname = (char *) xmalloc (strlen (name) + 10);
+  char *tname;
   const char *bname = lbasename (name);
   real_name = name;
 
   /* Prepend tmp- to the beginning, to avoid file-name clashes after
      truncation on filesystems with limited namespaces (DOS).  */
-  sprintf (tname, "%.*stmp-%s", (int) (bname - name), name, bname);
+  if (asprintf (&tname, "%.*stmp-%s", (int) (bname - name), name, bname) == -1)
+    {
+      fprintf (stderr, _("%s: Can't allocate memory for temp name (%s)\n"),
+              program_name, strerror(errno));
+      maybequit ();
+      return;
+    }
+
   obfd = bfd_openw (tname, NULL);
 
   if (!obfd)