diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index 1aa29fa3f7..81397668e8 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -655,9 +655,11 @@ inline uint32_t fnv1_hash_object_id(const char *str, size_t len) { } /// snprintf-like function returning std::string of maximum length \p len (excluding null terminator). +/// @warning Allocates heap memory. Use snprintf() with a stack buffer instead. std::string __attribute__((format(printf, 1, 3))) str_snprintf(const char *fmt, size_t len, ...); /// sprintf-like function returning std::string. +/// @warning Allocates heap memory. Use snprintf() with a stack buffer instead. std::string __attribute__((format(printf, 1, 2))) str_sprintf(const char *fmt, ...); #ifdef USE_ESP8266 diff --git a/script/ci-custom.py b/script/ci-custom.py index 01e197057a..b146c9867e 100755 --- a/script/ci-custom.py +++ b/script/ci-custom.py @@ -692,6 +692,8 @@ HEAP_ALLOCATING_HELPERS = { "str_truncate": "removal (function is unused)", "str_upper_case": "removal (function is unused)", "str_snake_case": "removal (function is unused)", + "str_sprintf": "snprintf() with a stack buffer", + "str_snprintf": "snprintf() with a stack buffer", } @@ -710,7 +712,9 @@ HEAP_ALLOCATING_HELPERS = { r"str_sanitize(?!_)|" r"str_truncate|" r"str_upper_case|" - r"str_snake_case" + r"str_snake_case|" + r"str_sprintf|" + r"str_snprintf" r")\s*\(" + CPP_RE_EOL, include=cpp_include, exclude=[