From: Alan Modra Date: Thu, 12 May 2022 02:08:05 +0000 (+0930) Subject: PR29142, segv in ar with empty archive and libdeps specified X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fa445221958a9b8c8c4a804a339bc54cedfd83b9;p=binutils-gdb.git PR29142, segv in ar with empty archive and libdeps specified PR 29142 * ar.c (main): Properly handle libdeps for zero file_count. --- diff --git a/binutils/ar.c b/binutils/ar.c index 0d4c7cf16a6..6f3f1d6946f 100644 --- a/binutils/ar.c +++ b/binutils/ar.c @@ -894,14 +894,16 @@ main (int argc, char **argv) being operated on. We shouldn't use 1st slot, but we want to avoid having to search all the way to the end of an archive with a large number of members at link time. */ - new_files = xmalloc ((file_count + 2) * sizeof (char *)); - new_files[0] = files[0]; - new_files[1] = LIBDEPS; - for (i = 1; i < file_count; i++) - new_files[i+1] = files[i]; - file_count = ++i; + new_files = xmalloc ((file_count + 2) * sizeof (*new_files)); + if (file_count) + { + new_files[0] = files[0]; + memcpy (new_files + 1, files, file_count * sizeof (*files)); + } + new_files[file_count != 0] = LIBDEPS; + file_count++; + new_files[file_count] = NULL; files = new_files; - files[i] = NULL; } switch (operation)