diff --git a/esphome/core/helpers.cpp b/esphome/core/helpers.cpp index 4768c4eb95..5940f6ec98 100644 --- a/esphome/core/helpers.cpp +++ b/esphome/core/helpers.cpp @@ -24,7 +24,7 @@ static const char *const TAG = "helpers"; __attribute__((noinline, cold)) void *callback_manager_grow(void *data, uint16_t size, uint16_t &capacity, size_t elem_size) { - ESPHOME_DEBUG_ASSERT(size < UINT16_MAX - 1); + ESPHOME_DEBUG_ASSERT(size < UINT16_MAX); uint16_t new_cap = size + 1; auto *new_data = ::operator new(new_cap *elem_size); if (data) { diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index 4937dbdd4e..f65409bc5f 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -1834,6 +1834,9 @@ template class CallbackManager { /// Call all callbacks in this manager. inline void ESPHOME_ALWAYS_INLINE call(Ts... args) { + if (this->size_ == 0) { + return; + } for (auto *it = this->data_, *end = it + this->size_; it != end; ++it) { it->call(args...); }