From 2e02f29632218fc24d71fbbefc368d551d0528a7 Mon Sep 17 00:00:00 2001
From: Christos Zoulas <christos@zoulas.com>
Date: Mon, 10 Jun 2019 13:15:23 +0100
Subject: [PATCH] Tidy up ar_open by using asprintf to replace xmalloc and
 sprintf.

	PR 24649
	* arsup.c (ar_open): Use asprintf in place of xmalloc and
	sprintf.
---
 binutils/ChangeLog |  6 ++++++
 binutils/arsup.c   | 11 +++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index c98ed943508..b845caca035 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -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:
diff --git a/binutils/arsup.c b/binutils/arsup.c
index 75549bba118..0836496180a 100644
--- a/binutils/arsup.c
+++ b/binutils/arsup.c
@@ -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)
-- 
GitLab