Upstream-Status: Backport Signed-off-by: Ross Burton From 32d95fe0c90c59352a0ce3102fc9866cbfb0f629 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Sat, 1 Dec 2018 11:40:02 +0200 Subject: [PATCH] Fix sigfault when appending to archive Bug reported by Ross Burton. See * 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