Upstream-Status: Backport
Signed-off-by: Ross Burton <ross.burton@intel.com>

From 32d95fe0c90c59352a0ce3102fc9866cbfb0f629 Mon Sep 17 00:00:00 2001
From: Sergey Poznyakoff <gray@gnu.org>
Date: Sat, 1 Dec 2018 11:40:02 +0200
Subject: [PATCH] Fix sigfault when appending to archive

Bug reported by Ross Burton. See
<http://lists.gnu.org/archive/html/bug-cpio/2018-11/msg00000.html>

* src/util.c: Keep static copy of the buffer pointer; always
assign it to file_hdr->c_name. Use x2realloc for memory management.
---
 src/util.c | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)

diff --git a/src/util.c b/src/util.c
index 10486dc..4e49124 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1413,22 +1413,13 @@ set_file_times (int fd,
 void
 cpio_set_c_name (struct cpio_file_stat *file_hdr, char *name)
 {
+  static char *buf = NULL;
   static size_t buflen = 0;
   size_t len = strlen (name) + 1;
 
-  if (buflen == 0)
-    {
-      buflen = len;
-      if (buflen < 32)
-        buflen = 32;
-      file_hdr->c_name = xmalloc (buflen);
-    }
-  else if (buflen < len)
-    {
-      buflen = len;
-      file_hdr->c_name = xrealloc (file_hdr->c_name, buflen);
-    }
-
+  while (buflen < len)
+    buf = x2realloc (buf, &buflen);
+  file_hdr->c_name = buf;
   file_hdr->c_namesize = len;
   memmove (file_hdr->c_name, name, len);
 }
-- 
2.18.0

