Commit 11f06115 authored by Allison Karlitskaya's avatar Allison Karlitskaya

Bug 629709 - Empty variants

Fix some GVariant bugs uncovered by calling g_variant_new_from_data with
invalid data (which it should be immune to).
parent 1c5b96e9
......@@ -503,11 +503,33 @@ g_variant_new_from_buffer (const GVariantType *type,
gboolean trusted)
{
GVariant *value;
guint alignment;
gsize size;
value = g_variant_alloc (type, TRUE, trusted);
value->contents.serialised.buffer = g_buffer_ref (buffer);
value->contents.serialised.data = buffer->data;
value->size = buffer->size;
g_variant_type_info_query (value->type_info,
&alignment, &size);
if (size && buffer->size != size)
{
/* Creating a fixed-sized GVariant with a buffer of the wrong
* size.
*
* We should do the equivalent of pulling a fixed-sized child out
* of a brozen container (ie: data is NULL size is equal to the correct
* fixed size).
*/
value->contents.serialised.data = NULL;
value->size = size;
}
else
{
value->contents.serialised.data = buffer->data;
value->size = buffer->size;
}
return value;
}
......
......@@ -1544,6 +1544,9 @@ g_variant_serialised_is_normal (GVariantSerialised serialised)
)
if (serialised.data == NULL)
return FALSE;
/* some hard-coded terminal cases */
switch (g_variant_type_info_get_type_char (serialised.type_info))
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment