[dconf: 2/9] Avoid calling Standard C string/array functions with NULL arguments



commit 7fd9f61dbdbe4b0a05c7c66267f06119a16e869a
Author: Philip Withnall <withnall endlessm com>
Date:   Mon Aug 13 14:13:28 2018 +0100

    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

 gvdb-builder.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
---
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);


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