From 4ae15a14ac689f710eb6a4f8d9951356828410a2 Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
Date: Mon, 15 Feb 2021 19:18:07 +0200
Subject: [PATCH] monitors: sanitize node names to match media-session's
 behavior

---
 src/scripts/monitors/monitor-alsa.lua   | 7 ++++++-
 src/scripts/monitors/monitor-bluez5.lua | 4 +++-
 src/scripts/monitors/monitor-v4l2.lua   | 3 +++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/scripts/monitors/monitor-alsa.lua b/src/scripts/monitors/monitor-alsa.lua
index 9153b6f9..4ab7f558 100644
--- a/src/scripts/monitors/monitor-alsa.lua
+++ b/src/scripts/monitors/monitor-alsa.lua
@@ -114,6 +114,9 @@ function createNode(parent, id, type, factory, properties)
          .. "." ..
          profile
 
+    -- sanitize name
+    name = name:gsub("([^%w_%-%.])", "_")
+
     properties["node.name"] = name
 
     -- deduplicate nodes with the same name
@@ -127,10 +130,12 @@ function createNode(parent, id, type, factory, properties)
   end
 
   -- and a nick
-  properties["node.nick"] = properties["node.nick"]
+  local nick = properties["node.nick"]
       or dev_props["device.nick"]
       or dev_props["api.alsa.card.name"]
       or dev_props["alsa.card_name"]
+  -- also sanitize nick, but allow all characters except :
+  properties["node.nick"] = nick:gsub("(:)", "_")
 
   -- ensure the node has a description
   if not properties["node.description"] then
diff --git a/src/scripts/monitors/monitor-bluez5.lua b/src/scripts/monitors/monitor-bluez5.lua
index 2a57899c..0f08ccdd 100644
--- a/src/scripts/monitors/monitor-bluez5.lua
+++ b/src/scripts/monitors/monitor-bluez5.lua
@@ -56,11 +56,13 @@ function createNode(parent, id, type, factory, properties)
       or "bluetooth-device"
 
   -- set the node name
-  properties["node.name"] =
+  local name =
       ((factory:find("sink") and "bluez_output") or
        (factory:find("source") and "bluez_input" or factory)) .. "." ..
       (properties["api.bluez5.address"] or dev_props["device.name"]) .. "." ..
       (properties["api.bluez5.profile"] or "unknown")
+  -- sanitize name
+  properties["node.name"] = name:gsub("([^%w_%-%.])", "_")
 
   -- set priority
   if not properties["priority.driver"] then
diff --git a/src/scripts/monitors/monitor-v4l2.lua b/src/scripts/monitors/monitor-v4l2.lua
index 85401671..cfc4d230 100644
--- a/src/scripts/monitors/monitor-v4l2.lua
+++ b/src/scripts/monitors/monitor-v4l2.lua
@@ -68,6 +68,9 @@ function createNode(parent, id, type, factory, properties)
        dev_props["device.alias"] or
        "v4l2-device")
 
+  -- sanitize name
+  name = name:gsub("([^%w_%-%.])", "_")
+
   properties["node.name"] = name
 
   -- deduplicate nodes with the same name
-- 
GitLab