diff --git a/glib/gbytes.c b/glib/gbytes.c index a3647caee..1fd3078d9 100644 --- a/glib/gbytes.c +++ b/glib/gbytes.c @@ -128,7 +128,7 @@ g_bytes_new (gconstpointer data, GBytesInline *bytes; bytes = g_malloc (sizeof *bytes + size); - bytes->bytes.data = data != NULL ? bytes->inline_data : NULL; + bytes->bytes.data = (data != NULL && size > 0) ? bytes->inline_data : NULL; bytes->bytes.size = size; bytes->bytes.free_func = NULL; bytes->bytes.user_data = NULL; diff --git a/glib/tests/bytes.c b/glib/tests/bytes.c index 7d432fdee..ac6d4b1d1 100644 --- a/glib/tests/bytes.c +++ b/glib/tests/bytes.c @@ -457,6 +457,14 @@ test_null (void) g_assert_null (data); g_assert_cmpuint (size, ==, 0); + + bytes = g_bytes_new ("some data which shouldn't be touched", 0); + g_assert_null (g_bytes_get_data (bytes, NULL)); + + data = g_bytes_unref_to_data (bytes, &size); + + g_assert_null (data); + g_assert_cmpuint (size, ==, 0); } static void