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]() {