Do not pass NULL to memcpy
authorTom Tromey <tom@tromey.com>
Thu, 26 Jul 2018 23:48:40 +0000 (17:48 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 3 Oct 2018 21:19:06 +0000 (15:19 -0600)
-fsanitize=undefined pointed out a spot that passes NULL to memcpy,
which is undefined behavior according to the C standard.

gdb/ChangeLog
2018-10-03  Tom Tromey  <tom@tromey.com>

* namespace.c (add_using_directive): Don't pass NULL to memcpy.

gdb/ChangeLog
gdb/namespace.c

index f5448c31d8025b245ae6de0afd60b83d2e1f2c51..1f8b8e57225769fbdaa55a7a6aec62bd9e59b009 100644 (file)
@@ -1,3 +1,7 @@
+2018-10-03  Tom Tromey  <tom@tromey.com>
+
+       * namespace.c (add_using_directive): Don't pass NULL to memcpy.
+
 2018-10-03  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
 
        * tid-parse.c (tid_is_in_list): Fix wrong 'See' comment.
index be998d9d491f13fbf58463b467087b3c3a3e6f8f..85c0c4b14d7788bb153bf1aba0f28ebfac8dcf89 100644 (file)
@@ -111,8 +111,9 @@ add_using_directive (struct using_direct **using_directives,
   else
     newobj->declaration = declaration;
 
-  memcpy (newobj->excludes, excludes.data (),
-         excludes.size () * sizeof (*newobj->excludes));
+  if (!excludes.empty ())
+    memcpy (newobj->excludes, excludes.data (),
+           excludes.size () * sizeof (*newobj->excludes));
   newobj->excludes[excludes.size ()] = NULL;
 
   newobj->next = *using_directives;