CodeQL 文档

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

点击查看 CodeQL 代码库中的查询

此查询指示 HRESULT 正在转换为布尔类型,反之亦然。

HRESULT 的典型成功值(S_OK)等于 0。但是,对于布尔类型,0 表示失败。

HRESULT 转换为布尔类型,然后在测试表达式中使用它,会导致错误的结果。

建议

要检查返回 HRESULT 的调用是否成功,请使用 FAILED 宏。

示例

在以下示例中,HRESULT 在测试表达式中使用不正确,因为它可能产生错误的结果。

LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);

if (!hr)
{
    // code ...
}

要解决此问题,请在测试表达式中使用 FAILED 宏。

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私