HRESULT 与布尔类型之间的转换¶
ID: cpp/hresult-boolean-conversion
Kind: problem
Security severity: 7.5
Severity: error
Precision: high
Tags:
- security
- external/cwe/cwe-253
Query suites:
- cpp-code-scanning.qls
- cpp-security-extended.qls
- cpp-security-and-quality.qls
此查询指示 HRESULT
正在转换为布尔类型,反之亦然。
HRESULT
的典型成功值(S_OK
)等于 0。但是,对于布尔类型,0 表示失败。
将 HRESULT
转换为布尔类型,然后在测试表达式中使用它,会导致错误的结果。
建议¶
要检查返回 HRESULT
的调用是否成功,请使用 FAILED
宏。
示例¶
在以下示例中,HRESULT
在测试表达式中使用不正确,因为它可能产生错误的结果。
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (!hr)
{
// code ...
}
要解决此问题,请在测试表达式中使用 FAILED
宏。
参考资料¶
常见漏洞枚举:CWE-253。