diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index ad0647d61e..3455e5fac2 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -575,9 +575,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, ...); /// Concatenate a name with a separator and suffix using an efficient stack-based approach. diff --git a/script/ci-custom.py b/script/ci-custom.py index e63e61e096..5a605c4980 100755 --- a/script/ci-custom.py +++ b/script/ci-custom.py @@ -690,6 +690,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", } @@ -706,7 +708,9 @@ HEAP_ALLOCATING_HELPERS = { r"get_mac_address(?!_)|" 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=[