From fca867e18d2ab0a9bc6d53634d5284576457e8d8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 22 Jan 2026 17:18:13 -1000 Subject: [PATCH] [wifi] Add CompactString to reduce WiFi scan heap fragmentation --- esphome/components/improv_serial/improv_serial_component.cpp | 2 +- esphome/core/helpers.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/esphome/components/improv_serial/improv_serial_component.cpp b/esphome/components/improv_serial/improv_serial_component.cpp index 1ce490a590..6ba8e1f814 100644 --- a/esphome/components/improv_serial/improv_serial_component.cpp +++ b/esphome/components/improv_serial/improv_serial_component.cpp @@ -267,7 +267,7 @@ bool ImprovSerialComponent::parse_improv_payload_(improv::ImprovCommand &command for (auto &scan : results) { if (scan.get_is_hidden()) continue; - std::string ssid = scan.get_ssid().c_str(); + std::string ssid = scan.get_ssid(); if (std::find(networks.begin(), networks.end(), ssid) != networks.end()) continue; // Send each ssid separately to avoid overflowing the buffer diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index 842f3b885e..1d836f3499 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -1769,6 +1769,9 @@ class CompactString { size_t size() const { return this->length_; } bool empty() const { return this->length_ == 0; } + // Implicit conversion to std::string for backwards compatibility + operator std::string() const { return std::string(this->data(), this->size()); } + bool operator==(const CompactString &other) const { return this->size() == other.size() && std::memcmp(this->data(), other.data(), this->size()) == 0; }