mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-05 02:36:19 +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)
|
gboolean trusted)
|
||||||
{
|
{
|
||||||
GVariant *value;
|
GVariant *value;
|
||||||
|
guint alignment;
|
||||||
|
gsize size;
|
||||||
|
|
||||||
value = g_variant_alloc (type, TRUE, trusted);
|
value = g_variant_alloc (type, TRUE, trusted);
|
||||||
|
|
||||||
value->contents.serialised.buffer = g_buffer_ref (buffer);
|
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;
|
return value;
|
||||||
}
|
}
|
||||||
|
@ -1544,6 +1544,9 @@ g_variant_serialised_is_normal (GVariantSerialised serialised)
|
|||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (serialised.data == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
/* some hard-coded terminal cases */
|
/* some hard-coded terminal cases */
|
||||||
switch (g_variant_type_info_get_type_char (serialised.type_info))
|
switch (g_variant_type_info_get_type_char (serialised.type_info))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user