在条件中使用字符串复制函数¶
ID: cpp/string-copy-return-value-as-boolean
Kind: problem
Security severity:
Severity: error
Precision: high
Tags:
- correctness
Query suites:
- cpp-security-and-quality.qls
此查询标识在条件中使用的字符串复制函数调用,可以直接使用,也可以作为相等运算符或逻辑运算符的一部分使用。最常见的字符串复制函数始终返回其 目标
参数,并且没有保留返回值来指示错误。因此,此类函数调用在布尔上下文中始终计算为 true。
规则考虑的字符串复制函数有
strcpy
wcscpy
_mbscpy
strncpy
_strncpy_l
wcsncpy
_wcsncpy_l
_mbsncpy
_mbsncpy_l
注意:强烈建议考虑使用更安全的字符串操作函数版本,例如strcpy_s
。
建议¶
检查以确保标记的表达式没有错别字。
如果打算进行字符串比较,请将函数更改为相应的字符串比较函数。
如果确实打算进行字符串复制,则很可能打算使用字符串复制函数的安全版本(例如 strcpy_s
),而不是字符串复制函数的不安全版本。
示例¶
if(strcpy(szbuf1, "Manager") == 0) // most likely strcmp was intended instead of strcpy
{
// ...
}
参考¶
适用于 C/C++ 的 Microsoft 代码分析警告:C6324
Microsoft C 库参考:strcpy、wcscpy、_mbscpy
US-CERT:strcpy_s() 和 strcat_s()