On June 4, 2020 10:22:55 PM GMT+02:00, Alexandre Oliva <ol...@adacore.com> 
wrote:
>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?

OK. 

Thanks, 
Richard. 

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

Reply via email to