From 8ee6392b0154378ca336e48b2fd9729ea3343952 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 18 Mar 2026 10:45:57 -1000 Subject: [PATCH] [ota] Add static_assert for OTAState packing assumption --- esphome/components/ota/ota_backend.h | 1 + 1 file changed, 1 insertion(+) diff --git a/esphome/components/ota/ota_backend.h b/esphome/components/ota/ota_backend.h index bcefcf4f0d..8a71135477 100644 --- a/esphome/components/ota/ota_backend.h +++ b/esphome/components/ota/ota_backend.h @@ -77,6 +77,7 @@ class OTAComponent : public Component { // Pack state, error, and progress into a single uint32_t so the lambda // captures only [this, packed] (8 bytes) — intended to fit in std::function SBO on supported toolchains. // Layout: [state:8][error:8][progress_fixed:16] where progress is 0–10000 (0.01% resolution) + static_assert(OTA_ERROR <= 0xFF, "OTAState must fit in 8 bits for packing"); uint32_t packed = (static_cast(state) << 24) | (static_cast(error) << 16) | static_cast(progress * 100.0f); this->defer([this, packed]() {