From 53345724f2f5f1fd8f6c31080e8c296555190da2 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 11 Feb 2026 18:38:25 -0600 Subject: [PATCH] Use fixed stack buffer for query strings bounded by CONFIG_HTTPD_MAX_URI_LEN Query strings cannot exceed the max URI length, so SmallBufferWithHeapFallback is unnecessary. Use a plain stack array instead for zero heap allocation. --- esphome/components/web_server_idf/utils.cpp | 11 ++++------- esphome/components/web_server_idf/web_server_idf.cpp | 6 +++--- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/esphome/components/web_server_idf/utils.cpp b/esphome/components/web_server_idf/utils.cpp index 5bdd219944f..d9c43bd6c7a 100644 --- a/esphome/components/web_server_idf/utils.cpp +++ b/esphome/components/web_server_idf/utils.cpp @@ -1,5 +1,4 @@ #ifdef USE_ESP32 -#include #include #include #include "esphome/core/helpers.h" @@ -56,15 +55,13 @@ optional query_key_value(const char *query_url, size_t query_len, c return {}; } - // Use stack buffer for typical query strings, heap fallback for large ones - SmallBufferWithHeapFallback<256, char> val(query_len); - - if (httpd_query_key_value(query_url, key, val.get(), query_len) != ESP_OK) { + char val[CONFIG_HTTPD_MAX_URI_LEN + 1]; + if (httpd_query_key_value(query_url, key, val, query_len) != ESP_OK) { return {}; } - url_decode(val.get()); - return {val.get()}; + url_decode(val); + return {val}; } bool query_has_key(const char *query_url, size_t query_len, const char *key) { diff --git a/esphome/components/web_server_idf/web_server_idf.cpp b/esphome/components/web_server_idf/web_server_idf.cpp index 9ce4b3673d5..8e1623f0998 100644 --- a/esphome/components/web_server_idf/web_server_idf.cpp +++ b/esphome/components/web_server_idf/web_server_idf.cpp @@ -422,11 +422,11 @@ static auto search_query_sources(httpd_req_t *req, const std::string &post_query if (len == 0) { return {}; } - SmallBufferWithHeapFallback<256, char> buf(len + 1); - if (httpd_req_get_url_query_str(req, buf.get(), len + 1) != ESP_OK) { + char buf[AsyncWebServerRequest::URL_BUF_SIZE]; + if (httpd_req_get_url_query_str(req, buf, len + 1) != ESP_OK) { return {}; } - return func(buf.get(), len, name); + return func(buf, len, name); } optional AsyncWebServerRequest::find_query_value_(const char *name) const {