diff --git a/esphome/core/helpers.cpp b/esphome/core/helpers.cpp index c79682fb41..6283f088f5 100644 --- a/esphome/core/helpers.cpp +++ b/esphome/core/helpers.cpp @@ -366,7 +366,9 @@ std::string value_accuracy_to_string(float value, int8_t accuracy_decimals) { std::string value_accuracy_with_uom_to_string(float value, int8_t accuracy_decimals, StringRef unit_of_measurement) { normalize_accuracy_decimals(value, accuracy_decimals); - char tmp[64]; // Increased to accommodate unit of measurement + // Buffer sized for float (up to ~15 chars) + space + typical UOM (usually <20 chars like "μS/cm") + // snprintf truncates safely if exceeded, though ESPHome UOMs are typically short + char tmp[64]; if (unit_of_measurement.empty()) { snprintf(tmp, sizeof(tmp), "%.*f", accuracy_decimals, value); } else { diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index 51115105ac..3b38af0dd8 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -14,10 +14,6 @@ #include "esphome/core/optional.h" -namespace esphome { -class StringRef; -} - #ifdef USE_ESP8266 #include #endif @@ -49,6 +45,9 @@ class StringRef; namespace esphome { +// Forward declaration to avoid circular dependency with string_ref.h +class StringRef; + /// @name STL backports ///@{