From 0bf90d18ef6ba1d9c9f5970c4d4108ad1fbf5a33 Mon Sep 17 00:00:00 2001 From: Indrajit Raychaudhuri Date: Tue, 24 Sep 2024 11:18:17 -0500 Subject: [PATCH] Ensure that HomeKit names start and end with alphanumeric character (#126413) --- homeassistant/components/homekit/util.py | 7 ++++++- tests/components/homekit/test_type_sensors.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index 4d4620477cb..ae7e35030be 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -114,6 +114,7 @@ _LOGGER = logging.getLogger(__name__) NUMBERS_ONLY_RE = re.compile(r"[^\d.]+") VERSION_RE = re.compile(r"([0-9]+)(\.[0-9]+)?(\.[0-9]+)?") +INVALID_END_CHARS = "-_" MAX_VERSION_PART = 2**32 - 1 @@ -414,7 +415,11 @@ def cleanup_name_for_homekit(name: str | None) -> str: # likely isn't a problem if name is None: return "None" # None crashes apple watches - return name.translate(HOMEKIT_CHAR_TRANSLATIONS)[:MAX_NAME_LENGTH] + return ( + name.translate(HOMEKIT_CHAR_TRANSLATIONS) + .lstrip(INVALID_END_CHARS)[:MAX_NAME_LENGTH] + .rstrip(INVALID_END_CHARS) + ) def temperature_to_homekit(temperature: float, unit: str) -> float: diff --git a/tests/components/homekit/test_type_sensors.py b/tests/components/homekit/test_type_sensors.py index 3e8e05fdcfd..ef1c124781a 100644 --- a/tests/components/homekit/test_type_sensors.py +++ b/tests/components/homekit/test_type_sensors.py @@ -655,7 +655,7 @@ async def test_bad_name(hass: HomeAssistant, hk_driver) -> None: assert acc.category == 10 # Sensor assert acc.char_humidity.value == 20 - assert acc.display_name == "--Humid--" + assert acc.display_name == "Humid" async def test_empty_name(hass: HomeAssistant, hk_driver) -> None: