From d796e8db5c3fec13ef286a70bf8b5a0cb9597947 Mon Sep 17 00:00:00 2001 From: pezinek Date: Fri, 16 Jun 2017 14:55:59 +0200 Subject: [PATCH] No update in MQTT Binary Sensor #7478 (#8057) --- 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 16ac00e3b7b..7c5d1a4faab 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 0ef512edcd6..3be3d5d5ef6 100644 --- a/tests/components/mqtt/test_init.py +++ b/tests/components/mqtt/test_init.py @@ -249,6 +249,19 @@ class TestMQTT(unittest.TestCase): 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,