From 649ad47e628cb8f5ee965cda8da9f23a82ab2902 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 1 Jul 2025 10:05:23 -0500 Subject: [PATCH] web_server_ support for ota backend idf --- .../components/ota_base/ota_backend_esp_idf.cpp | 15 ++++++++++----- esphome/components/ota_base/ota_backend_esp_idf.h | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/esphome/components/ota_base/ota_backend_esp_idf.cpp b/esphome/components/ota_base/ota_backend_esp_idf.cpp index eef4cb8026..b49a690a95 100644 --- a/esphome/components/ota_base/ota_backend_esp_idf.cpp +++ b/esphome/components/ota_base/ota_backend_esp_idf.cpp @@ -67,7 +67,10 @@ OTAResponseTypes IDFOTABackend::begin(size_t image_size) { return OTA_RESPONSE_OK; } -void IDFOTABackend::set_update_md5(const char *expected_md5) { memcpy(this->expected_bin_md5_, expected_md5, 32); } +void IDFOTABackend::set_update_md5(const char *expected_md5) { + memcpy(this->expected_bin_md5_, expected_md5, 32); + this->md5_set_ = true; +} OTAResponseTypes IDFOTABackend::write(uint8_t *data, size_t len) { esp_err_t err = esp_ota_write(this->update_handle_, data, len); @@ -84,10 +87,12 @@ OTAResponseTypes IDFOTABackend::write(uint8_t *data, size_t len) { } OTAResponseTypes IDFOTABackend::end() { - this->md5_.calculate(); - if (!this->md5_.equals_hex(this->expected_bin_md5_)) { - this->abort(); - return OTA_RESPONSE_ERROR_MD5_MISMATCH; + if (this->md5_set_) { + this->md5_.calculate(); + if (!this->md5_.equals_hex(this->expected_bin_md5_)) { + this->abort(); + return OTA_RESPONSE_ERROR_MD5_MISMATCH; + } } esp_err_t err = esp_ota_end(this->update_handle_); this->update_handle_ = 0; diff --git a/esphome/components/ota_base/ota_backend_esp_idf.h b/esphome/components/ota_base/ota_backend_esp_idf.h index a7e34cb5ae..3c760df1c8 100644 --- a/esphome/components/ota_base/ota_backend_esp_idf.h +++ b/esphome/components/ota_base/ota_backend_esp_idf.h @@ -24,6 +24,7 @@ class IDFOTABackend : public OTABackend { const esp_partition_t *partition_; md5::MD5Digest md5_{}; char expected_bin_md5_[32]; + bool md5_set_{false}; }; } // namespace ota_base