【问题标题】:PVS-Studio: warning V595 is generated even if COM methods results are checkedPVS-Studio:即使检查了 COM 方法结果,也会生成警告 V595
【发布时间】:2017-09-25 14:48:55
【问题描述】:

(1) 如果IMoniker::BindToObject 的结果是S_OK,那么返回的指针是有效的。但 PVS-Studio 将其标记为 V595。为什么?

(2) 如果QueryInterface 成功,则返回的指针有效。但 PVS-Studio 将其标记为 V595。为什么?

HRESULT sc;
if (featureValidateSource)
{
    sc = lpmk->BindToObject(lpbc, NULL, IID_IOleObject, (void**)&lpObject);
    if (FAILED(sc))
    {
        lpbc->Release();
        lpmk->Release();
        if (lpObject) lpObject->Release();
        return sc;
    }
    lpObject->GetUserClassID(&clsid);                      // (1) <<< V595
}

LPOLELINK lpOleLink;
if (SUCCEEDED(m_pObject->QueryInterface(IID_IOleLink,(void**)&lpOleLink)))
{
    sc = lpOleLink->SetSourceMoniker(lpmk, clsid);         // (2) <<< V595
}

...

if (lpObject != NULL)                                      // (1) <<< V595
{
    lpObject->Update();
    lpObject->Release();
}

if (lpOleLink)                                             // (2) <<< V595
{
    lpOleLink->Release();
}

【问题讨论】:

    标签: pvs-studio


    【解决方案1】:

    这是我们函数注释系统的故障。 PVS-Studio 分析器目前具有来自最流行库的 6000 多个函数的注释。 These annotations 允许该工具执行大量诊断。但是,我们还没有对函数 BindToObject 和 QueryInterface 进行注释。但即使我们有,也无济于事。当前没有注释指定返回的 poitner 如何与 HRESULT 类型的状态相关。必须有一个连接:如果某些函数已成功执行,则返回非空指针。现在没有这样的东西,但我们会逐步实现这个算法。然后误报就会消失。

    由于现在没有这样的连接,分析器查看代码如下:

    if (X)
    {
      GetPtr(&ptr1);
      if (Y)
        return;
      ptr1->foo();          // (1) <<< V595
    }
    
    if (GetPtr(&ptr2))
    {
      ptr2->foo();          // (2) <<< V595
    }
    
    if (ptr1 != NULL)       // (1) <<< V595
    ;
    
    if (ptr2 != NULL)       // (1) <<< V595
    ;
    

    指针以某种方式初始化。之后,它们被取消引用,然后检查是否为 NULL。它看起来很可疑,因此分析器发出警告。 所以,是的,我们有过错。我们将及时改进对此类结构的分析。感谢您指出此代码。

    就目前而言,我们建议使用false positive suppression 的一种方式或使用suppression base

    【讨论】:

      猜你喜欢
      • 2017-09-25
      • 2017-09-25
      • 2012-02-18
      • 2021-11-08
      • 2013-09-24
      • 2018-11-13
      • 1970-01-01
      • 2021-03-04
      • 2014-06-22
      相关资源
      最近更新 更多