[PR95456] avoid memcpy (_, NULL, 0) in gcc.c
authorAlexandre Oliva <oliva@adacore.com>
Sat, 6 Jun 2020 01:31:19 +0000 (22:31 -0300)
committerAlexandre Oliva <oliva@gnu.org>
Sat, 6 Jun 2020 01:31:19 +0000 (22:31 -0300)
Some newly-added code in gcc.c might call memcpy with a NULL source
pointer and zero-length inputs.  Avoid such calls by rearranging the
code a little.

for  gcc/ChangeLog

PR driver/95456
* gcc.c (do_spec_1): Don't call memcpy (_, NULL, 0).

gcc/gcc.c

index e2362175f40110c5eb2280dc8e2df9ae98ad1601..c0eb3c10cfd63f8d073c2927d66b827aac60fb1c 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -6024,19 +6024,19 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
                      }
                    temp_filename_length
                      = dumpdir_length + suffix_length + 1;
-                   if (!outbase_length)
-                     temp_filename_length += basename_length;
-                   else
+                   if (outbase_length)
                      temp_filename_length += outbase_length;
+                   else
+                     temp_filename_length += basename_length;
                    tmp = (char *) alloca (temp_filename_length);
                    if (dumpdir_length)
                      memcpy (tmp, dumpdir, dumpdir_length);
-                   if (!outbase_length)
-                     memcpy (tmp + dumpdir_length, input_basename,
-                             basename_length);
-                   else
+                   if (outbase_length)
                      memcpy (tmp + dumpdir_length, outbase,
                              outbase_length);
+                   else if (basename_length)
+                     memcpy (tmp + dumpdir_length, input_basename,
+                             basename_length);
                    memcpy (tmp + temp_filename_length - suffix_length - 1,
                            suffix, suffix_length);
                    if (adjusted_suffix)