bugprone-misplaced-operator-in-strlen-in-alloc¶
查找在 strlen()
、strnlen()
、strnlen_s()
、wcslen()
、wcsnlen()
和 wcsnlen_s()
的参数中添加 1
而不是结果,并且该值用作内存分配函数(malloc()
、calloc()
、realloc()
、alloca()
)或 C++ 中的 new[]
运算符的参数的情况。即使这些函数(除了 new[]
运算符)之一被常量函数指针调用,该检查也能检测到错误情况。在 1
同时添加到参数和 strlen()
类函数的结果中的情况会被忽略,同样会被忽略的是整个加法运算被额外括号包围的情况。
C 示例代码
void bad_malloc(char *str) {
char *c = (char*) malloc(strlen(str + 1));
}
建议的修复方法是将 1
添加到 strlen()
的返回值,而不是它的参数。在上面的示例中,修复方法应该是
char *c = (char*) malloc(strlen(str) + 1);
C++ 示例代码
void bad_new(char *str) {
char *c = new char[strlen(str + 1)];
}
与使用 malloc()
函数的 C 代码一样,建议的修复方法是将 1
添加到 strlen()
的返回值,而不是它的参数。在上面的示例中,修复方法应该是
char *c = new char[strlen(str) + 1];
用于消除诊断的示例
void bad_malloc(char *str) {
char *c = (char*) malloc(strlen((str + 1)));
}