From d5a1d263c64667a98f42a80b47a50d7359d83119 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Tue, 21 Apr 2009 15:58:02 +0100 Subject: don't dispatch D-Bus tube having an invalid ServiceName --- src/empathy-tube-dispatch.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/empathy-tube-dispatch.c b/src/empathy-tube-dispatch.c index b1e7bce6d..63b31b2b6 100644 --- a/src/empathy-tube-dispatch.c +++ b/src/empathy-tube-dispatch.c @@ -167,9 +167,20 @@ empathy_tube_dispatch_constructed (GObject *object) } else if (!tp_strdiff (channel_type, EMP_IFACE_CHANNEL_TYPE_DBUS_TUBE)) { + GError *error = NULL; + type = TP_TUBE_TYPE_DBUS; service = tp_asv_get_string (properties, EMP_IFACE_CHANNEL_TYPE_DBUS_TUBE ".ServiceName"); + + if (!tp_dbus_check_valid_bus_name (service, TP_DBUS_NAME_TYPE_WELL_KNOWN, + &error)) + { + DEBUG ("Can't dispatch tube; invalid ServiceName %s: %s", service, + error->message); + g_error_free (error); + goto failed; + } } else { -- cgit v1.2.3 From 3ba482ccc034647d8e4bde47f92e3a86720150a3 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Tue, 21 Apr 2009 15:17:53 +0100 Subject: empathy_tube_handler_build_bus_name: escape invalid char in the service name --- libempathy/empathy-tube-handler.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/libempathy/empathy-tube-handler.c b/libempathy/empathy-tube-handler.c index 4fb82177d..18cda18b3 100644 --- a/libempathy/empathy-tube-handler.c +++ b/libempathy/empathy-tube-handler.c @@ -185,12 +185,31 @@ OUT: return thandler; } +static gchar * +sanitize_service_name (const gchar *str) +{ + guint i; + gchar *result; + + g_assert (str != NULL); + result = g_strdup (str); + + for (i = 0; result[i] != '\0'; i++) + { + if (!g_ascii_isalnum (result[i])) + result[i] = '_'; + } + + return result; +} + gchar * empathy_tube_handler_build_bus_name (TpTubeType type, const gchar *service) { gchar *str = NULL; const gchar *prefix = NULL; + gchar *service_escaped; g_return_val_if_fail (type < NUM_TP_TUBE_TYPES, NULL); g_return_val_if_fail (service != NULL, NULL); @@ -202,7 +221,9 @@ empathy_tube_handler_build_bus_name (TpTubeType type, else g_return_val_if_reached (NULL); - str = g_strconcat (prefix, service, NULL); + service_escaped = sanitize_service_name (service); + str = g_strconcat (prefix, service_escaped, NULL); + g_free (service_escaped); return str; } -- cgit v1.2.3