From 20c77336407dc7b3a643ce1422260897a1262e1b Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
Date: Thu, 18 Feb 2021 09:02:41 +0200
Subject: [PATCH] monitors: sanitize node descriptions too

https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/aea79cd79ca0f08fe6aae566d23bbf972e27092f
---
 src/scripts/monitors/alsa.lua  | 15 ++++++++-------
 src/scripts/monitors/bluez.lua |  4 +++-
 src/scripts/monitors/v4l2.lua  |  5 +++--
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/scripts/monitors/alsa.lua b/src/scripts/monitors/alsa.lua
index a81d7693..a417cb4d 100644
--- a/src/scripts/monitors/alsa.lua
+++ b/src/scripts/monitors/alsa.lua
@@ -134,8 +134,8 @@ function createNode(parent, id, type, factory, properties)
       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("(:)", "_")
+  -- also sanitize nick, replace ':' with ' '
+  properties["node.nick"] = nick:gsub("(:)", " ")
 
   -- ensure the node has a description
   if not properties["node.description"] then
@@ -143,14 +143,15 @@ function createNode(parent, id, type, factory, properties)
     local name = properties["api.alsa.pcm.name"] or properties["api.alsa.pcm.id"] or dev
 
     if profile_desc then
-      properties["node.description"] = desc .. " " .. profile_desc
+      desc = desc .. " " .. profile_desc
     elseif subdev == "0" then
-      properties["node.description"] = desc .. " (" .. name .. " " .. subdev .. ")"
+      desc = desc .. " (" .. name .. " " .. subdev .. ")"
     elseif dev == "0" then
-      properties["node.description"] = desc .. " (" .. name .. ")"
-    else
-      properties["node.description"] = desc
+      desc = desc .. " (" .. name .. ")"
     end
+
+    -- also sanitize description, replace ':' with ' '
+    properties["node.description"] = desc:gsub("(:)", " ")
   end
 
   -- apply properties from config.rules
diff --git a/src/scripts/monitors/bluez.lua b/src/scripts/monitors/bluez.lua
index c6c1f00b..9adb8693 100644
--- a/src/scripts/monitors/bluez.lua
+++ b/src/scripts/monitors/bluez.lua
@@ -48,12 +48,14 @@ function createNode(parent, id, type, factory, properties)
   properties["node.pause-on-idle"] = false
 
   -- set the node description
-  properties["node.description"] =
+  local desc =
       dev_props["device.description"]
       or dev_props["device.name"]
       or dev_props["device.nick"]
       or dev_props["device.alias"]
       or "bluetooth-device"
+  -- sanitize description, replace ':' with ' '
+  properties["node.description"] = desc:gsub("(:)", " ")
 
   -- set the node name
   local name =
diff --git a/src/scripts/monitors/v4l2.lua b/src/scripts/monitors/v4l2.lua
index cfc4d230..84578fa8 100644
--- a/src/scripts/monitors/v4l2.lua
+++ b/src/scripts/monitors/v4l2.lua
@@ -67,7 +67,6 @@ function createNode(parent, id, type, factory, properties)
        dev_props["device.nick"] or
        dev_props["device.alias"] or
        "v4l2-device")
-
   -- sanitize name
   name = name:gsub("([^%w_%-%.])", "_")
 
@@ -83,7 +82,9 @@ function createNode(parent, id, type, factory, properties)
   end
 
   -- set the node description
-  properties["node.description"] = dev_props["device.description"] or "v4l2-device"
+  local desc = dev_props["device.description"] or "v4l2-device"
+  -- sanitize description, replace ':' with ' '
+  properties["node.description"] = desc:gsub("(:)", " ")
 
   -- apply properties from config.rules
   rulesApplyProperties(properties)
-- 
GitLab