portal network monitor: Validate connectivity

Only accept connectivity values that are actually
in the range of GNetworkConnectivity.

https://gitlab.gnome.org/GNOME/glib/merge_requests/227
This commit is contained in:
Florian Müllner 2018-08-06 15:46:56 +02:00 committed by Matthias Clasen
parent 860735f01b
commit d047ca341b

View File

@ -92,6 +92,20 @@ g_network_monitor_portal_get_property (GObject *object,
}
}
static gboolean
is_valid_connectivity (guint32 value)
{
GEnumValue *enum_value;
GEnumClass *enum_klass;
enum_klass = g_type_class_ref (G_TYPE_NETWORK_CONNECTIVITY);
enum_value = g_enum_get_value (enum_klass, value);
g_type_class_unref (enum_klass);
return enum_value != NULL;
}
static void
got_available (GObject *source,
GAsyncResult *res,
@ -228,7 +242,8 @@ got_connectivity (GObject *source,
g_variant_unref (ret);
}
if (nm->priv->connectivity != connectivity)
if (nm->priv->connectivity != connectivity &&
is_valid_connectivity (connectivity))
{
nm->priv->connectivity = connectivity;
g_object_notify (G_OBJECT (nm), "connectivity");
@ -292,7 +307,8 @@ got_status (GObject *source,
should_emit_changed = TRUE;
}
if (nm->priv->connectivity != connectivity)
if (nm->priv->connectivity != connectivity &&
is_valid_connectivity (connectivity))
{
nm->priv->connectivity = connectivity;
g_object_notify (G_OBJECT (nm), "connectivity");
@ -361,7 +377,8 @@ proxy_properties_changed (GDBusProxy *proxy,
if (ret)
{
GNetworkConnectivity connectivity = g_variant_get_uint32 (ret);
if (nm->priv->connectivity != connectivity)
if (nm->priv->connectivity != connectivity &&
is_valid_connectivity (connectivity))
{
nm->priv->connectivity = connectivity;
g_object_notify (G_OBJECT (nm), "connectivity");