g_variant_get_data_as_bytes fails after serializing a variant
Note: This was originally reported as pygobject#359 (closed)
When serializing then deserializing an 'amv'
variant, g_variant_get_data_as_bytes()
fails on the NULL
elements.
Take the following code example: (thank you @chrisaw for providing the C reproducer for my original Python script)
#include <glib.h>
int
main (void)
{
GBytes *data1, *data2;
GVariantType *mv_type = g_variant_type_new_maybe (G_VARIANT_TYPE_VARIANT);
GVariant *variant = g_variant_new_array (mv_type,
(GVariant*[]){ g_variant_new_maybe (G_VARIANT_TYPE_VARIANT, NULL) }, 1);
data1 = g_variant_get_data_as_bytes (g_variant_get_child_value (variant, 0));
g_print ("data1: %p\n", data1);
/* serialize variant */
g_variant_get_data (variant);
data2 = g_variant_get_data_as_bytes (g_variant_get_child_value (variant, 0));
g_print ("data2: %p\n", data2);
}
This program outputs:
data1: 0x105a2c0
(process:9886): GLib-CRITICAL **: 10:14:39.727: g_bytes_new_from_bytes: assertion 'offset <= bytes->size' failed
data2: (nil)
Before serializing the variant, g_variant_get_data_as_bytes()
returns an empty byte string as expected, but after serializing it it fails with the assertion above.
Before serializing it, g_variant_get_data_as_bytes
returns an empty byte string as expected.
Edited by Mathieu Bridon