]> git.0d.be Git - empathy.git/commitdiff
Merge branch 'tube-bus-name'
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Tue, 21 Apr 2009 15:06:05 +0000 (16:06 +0100)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Tue, 21 Apr 2009 15:06:05 +0000 (16:06 +0100)
libempathy/empathy-tube-handler.c
src/empathy-tube-dispatch.c

index 4fb82177da5bae4c77c8971ea668b5a1a48c4faf..18cda18b31dd5b3ea9f020861bbdc36632d2b9a3 100644 (file)
@@ -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;
 }
index b1e7bce6d18d13c3ec1ef4efc087b4393a25afb6..63b31b2b6f1e190b624ea963cbe443d190d5d59b 100644 (file)
@@ -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
     {