summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2019-10-24 11:53:23 +0100
committerSimon McVittie <smcv@collabora.com>2019-10-24 12:08:20 +0100
commit3837b83f5aea43a9ac523500e16af5ae08fdefc8 (patch)
treebc7e539b69f13305c771f6b91aafc7da04334ba3
parent8a7b375216ef65d76510f3ea37e526392d160f4c (diff)
downloadglib-3837b83f5aea43a9ac523500e16af5ae08fdefc8.tar.gz
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>
-rw-r--r--glib/garray.c4
1 files 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));