On Jun  3, 2020, Martin Liška <mli...@suse.cz> wrote:

> On 6/3/20 5:58 AM, Alexandre Oliva wrote:
>> Please let me know if you'd prefer me to take this PR over.

> Yes, please take a look.

Here's what I've regstrapped on x86_64-linux-gnu.  It makes both memcpy
calls conditional, and reorders the length computation to match.

I also ran outputs.exp with a memcpy wrapper in gcc.c to detect any
calls with NULL pointers, and nothing else came up.

Ok to install?


[PR95456] avoid memcpy (_, NULL, 0) in gcc.c

From: Alexandre Oliva <ol...@adacore.com>

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 |   14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/gcc/gcc.c b/gcc/gcc.c
index e2362175f4..c0eb3c1 100644
--- 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)


-- 
Alexandre Oliva, freedom fighter    he/him    https://FSFLA.org/blogs/lxo/
Free Software Evangelist              Stallman was right, but he's left :(
GNU Toolchain Engineer           Live long and free, and prosper ethically

Reply via email to