summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <withnall@endlessm.com>2018-08-13 14:13:28 +0100
committerPhilip Withnall <withnall@endlessm.com>2018-08-13 14:34:19 +0100
commit7fd9f61dbdbe4b0a05c7c66267f06119a16e869a (patch)
tree9074cd1ce451c085d1a90a93ff3c5ad76cb924cc
parent355228121e7656b1c48fd96fa4bcccc0d14161ae (diff)
downloadgvdb-7fd9f61dbdbe4b0a05c7c66267f06119a16e869a.tar.gz
Avoid calling Standard C string/array functions with NULL arguments
glibc string.h declares memcpy() with attribute(nonnull(1,2)), causing calls with NULL arguments to be treated as undefined behaviour. This is consistent with ISO C99 and C11, which state that passing 0 to string functions as an array length does not remove the requirement that the pointer to the array is a valid pointer. gcc -fsanitize=undefined catches this while running OSTree's test suite. Similarly, running the GLib test suite reports similar issues for qsort(), memmove(), memcmp(). (This is a partial cherry-pick of commit e5ed410c8c0fe823883 from GLib.) Signed-off-by: Simon McVittie <smcv@debian.org> Bug: https://bugzilla.gnome.org/show_bug.cgi?id=775510 Reviewed-by: Colin Walters
-rw-r--r--gvdb-builder.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gvdb-builder.c b/gvdb-builder.c
index c63d117..0618768 100644
--- a/gvdb-builder.c
+++ b/gvdb-builder.c
@@ -293,7 +293,8 @@ file_builder_add_string (FileBuilder *fb,
chunk->offset = fb->offset;
chunk->size = length;
chunk->data = g_malloc (length);
- memcpy (chunk->data, string, length);
+ if (length != 0)
+ memcpy (chunk->data, string, length);
*start = guint32_to_le (fb->offset);
*size = guint16_to_le (length);