mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 11:26:16 +01:00
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).
This commit is contained in:
parent
1c5b96e92b
commit
11f06115a4
@ -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))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user