[glib/wip/smcv/array-memcpy-ub] array: Avoid use of memcpy(dest, NULL, 0)



commit 3837b83f5aea43a9ac523500e16af5ae08fdefc8
Author: Simon McVittie <smcv collabora com>
Date:   Thu Oct 24 11:53:23 2019 +0100

    array: Avoid use of memcpy(dest, NULL, 0)
    
    glibc declares memcpy() with the first two arguments (the pointers)
    annotated as non-null via an attribute, which results in the undefined
    behaviour sanitizer considering it to be UB to pass a null pointer
    in the second argument, even if we are copying 0 bytes (and hence not
    actually dereferencing the pointer).
    
    This shows up in array-test when run with the undefined behaviour
    sanitizer.
    
    Signed-off-by: Simon McVittie <smcv collabora com>

 glib/garray.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
---
diff --git a/glib/garray.c b/glib/garray.c
index 2e8dd0b6b..4cbfd1373 100644
--- a/glib/garray.c
+++ b/glib/garray.c
@@ -1146,7 +1146,7 @@ g_ptr_array_copy (GPtrArray *array,
       for (i = 0; i < array->len; i++)
         new_array->pdata[i] = func (array->pdata[i], user_data);
     }
-  else
+  else if (array->len > 0)
     {
       memcpy (new_array->pdata, array->pdata,
               array->len * sizeof (*array->pdata));
@@ -1797,7 +1797,7 @@ g_ptr_array_extend (GPtrArray  *array_to_extend,
         rarray_to_extend->pdata[i + rarray_to_extend->len] =
           func (array->pdata[i], user_data);
     }
-  else
+  else if (array->len > 0)
     {
       memcpy (rarray_to_extend->pdata + rarray_to_extend->len, array->pdata,
               array->len * sizeof (*array->pdata));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]