From 1a926da7b4891f05fbdb5ad9131c8977a7f8e902 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 11 Feb 2026 19:15:35 -0600 Subject: [PATCH] Check for ESP_OK or ESP_ERR_HTTPD_RESULT_TRUNC explicitly in query_has_key Instead of treating any non-ESP_ERR_NOT_FOUND result as key-present, explicitly check for the two success codes. This avoids false positives from unexpected error codes like ESP_ERR_INVALID_ARG. --- esphome/components/web_server_idf/utils.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/esphome/components/web_server_idf/utils.cpp b/esphome/components/web_server_idf/utils.cpp index 69cfdd15bb..c58ca2a24f 100644 --- a/esphome/components/web_server_idf/utils.cpp +++ b/esphome/components/web_server_idf/utils.cpp @@ -73,9 +73,10 @@ bool query_has_key(const char *query_url, size_t query_len, const char *key) { } // Minimal buffer — we only care if the key exists, not the value char buf[1]; - // httpd_query_key_value returns ESP_OK if key found (even if buffer too small for value), - // ESP_ERR_NOT_FOUND if key absent - return httpd_query_key_value(query_url, key, buf, sizeof(buf)) != ESP_ERR_NOT_FOUND; + // httpd_query_key_value returns ESP_OK if found, ESP_ERR_HTTPD_RESULT_TRUNC if found + // but value truncated (expected with 1-byte buffer), or other errors for invalid input + auto err = httpd_query_key_value(query_url, key, buf, sizeof(buf)); + return err == ESP_OK || err == ESP_ERR_HTTPD_RESULT_TRUNC; } // Helper function for case-insensitive string region comparison