diff --git a/src/list.c b/src/list.c index c1b2f84c..c26c8833 100644 --- a/src/list.c +++ b/src/list.c @@ -297,6 +297,7 @@ read_header() char *bp, *data; int size, written; static char *next_long_name, *next_long_link; + char *name; recurse: @@ -376,12 +377,22 @@ read_header() } else { - current_file_name = (next_long_name - ? next_long_name - : header->header.arch_name); - current_link_name = (next_long_link - ? next_long_link - : header->header.arch_linkname); + name = (next_long_name + ? next_long_name + : head->header.arch_name); + if (current_file_name) + free (current_file_name); + current_file_name = malloc (strlen (name) + 1); + strcpy (current_file_name, name); + + name = (next_long_link + ? next_long_link + : head->header.arch_linkname); + if (current_link_name) + free (current_link_name); + current_link_name = malloc (strlen (name) + 1); + strcpy (current_link_name, name); + next_long_link = next_long_name = 0; return 1; }