| 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 |
| |