From 29b1233609fd0cf7e4b756149ac669d0d36c967e Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:45:00 +1300 Subject: [PATCH] Validate sn74hc595 pin number are within range (#5655) --- esphome/components/sn74hc595/__init__.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/esphome/components/sn74hc595/__init__.py b/esphome/components/sn74hc595/__init__.py index 92b6d8d0e5..e98da72304 100644 --- a/esphome/components/sn74hc595/__init__.py +++ b/esphome/components/sn74hc595/__init__.py @@ -75,7 +75,15 @@ SN74HC595_PIN_SCHEMA = cv.All( ) -@pins.PIN_SCHEMA_REGISTRY.register(CONF_SN74HC595, SN74HC595_PIN_SCHEMA) +def sn74hc595_pin_final_validate(pin_config, parent_config): + max_pins = parent_config[CONF_SR_COUNT] * 8 + if pin_config[CONF_NUMBER] >= max_pins: + raise cv.Invalid(f"Pin number must be less than {max_pins}") + + +@pins.PIN_SCHEMA_REGISTRY.register( + CONF_SN74HC595, SN74HC595_PIN_SCHEMA, sn74hc595_pin_final_validate +) async def sn74hc595_pin_to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_parented(var, config[CONF_SN74HC595])