gvariant: Avoid memcmp (NULL, ., 0) or memcmp (., NULL, 0)

Similar to 3837b83f, glibc memcmp is declared with the first two
arguments annotated as non-null via an attribute, which results in the
undefined behaviour sanitizer considering it to be UB to pass a null
pointer there (even if we are comparing 0 bytes, and hence not actually
dereferencing the pointer).

This shows up in /gvariant/serialiser/children when run with the
undefined behaviour sanitizer.

Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
Simon McVittie 2019-11-04 13:40:40 +00:00
parent 6d8836515c
commit 2465e64c93

View File

@ -2765,7 +2765,10 @@ g_variant_equal (gconstpointer one,
data_one = g_variant_get_data ((GVariant *) one);
data_two = g_variant_get_data ((GVariant *) two);
equal = memcmp (data_one, data_two, size_one) == 0;
if (size_one)
equal = memcmp (data_one, data_two, size_one) == 0;
else
equal = TRUE;
}
else
{