From d53ea3349ac42b7a746bc25b4a9b43c87f553fbd Mon Sep 17 00:00:00 2001 From: PeZ Date: Fri, 16 Jun 2017 09:54:03 +0200 Subject: [PATCH] No update in MQTT Binary Sensor #7478 --- homeassistant/components/mqtt/__init__.py | 2 +- tests/components/mqtt/test_init.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index 16ac00e3b7b4ac..7c5d1a4faab5be 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -646,7 +646,7 @@ def _match_topic(subscription, topic): if sub_part == "+": reg_ex_parts.append(r"([^\/]+)") else: - reg_ex_parts.append(sub_part) + reg_ex_parts.append(re.escape(sub_part)) reg_ex = "^" + (r'\/'.join(reg_ex_parts)) + suffix + "$" diff --git a/tests/components/mqtt/test_init.py b/tests/components/mqtt/test_init.py index 0ef512edcd678c..3be3d5d5ef6d67 100644 --- a/tests/components/mqtt/test_init.py +++ b/tests/components/mqtt/test_init.py @@ -249,6 +249,19 @@ def test_subscribe_topic_level_wildcard_and_wildcard_no_match(self): self.hass.block_till_done() self.assertEqual(0, len(self.calls)) + def test_subscribe_special_characters(self): + """Test the subscription to topics with special characters.""" + topic = '/test-topic/$(.)[^]{-}' + payload = 'p4y.l[]a|> ?' + + mqtt.subscribe(self.hass, topic, self.record_calls) + + fire_mqtt_message(self.hass, topic, payload) + self.hass.block_till_done() + self.assertEqual(1, len(self.calls)) + self.assertEqual(topic, self.calls[0][0]) + self.assertEqual(payload, self.calls[0][1]) + def test_subscribe_binary_topic(self): """Test the subscription to a binary topic.""" mqtt.subscribe(self.hass, 'test-topic', self.record_calls,