【问题标题】:Suppress messages in Coverity using attributes?使用属性抑制 Coverity 中的消息?
【发布时间】:2019-02-08 09:55:43
【问题描述】:

我们正在使用 Coverity 来分析我们的 C# 代码是否存在缺陷。

我们有一些单元测试可以明确验证空参数是否被正确处理。

这些被 Coverity 列为缺陷。如果这是微软自己的代码分析,我们可以用[SuppressMessage(...)] 标记我们的方法进行空值传递,Coverity 是否可以使用类似的东西?

我们宁愿不要试图混淆代码以混淆 Coverity。

下面是给出此缺陷的示例代码:

[Test]
public void SomeRandomTest()
{
    var obj = new SomeRandomObject();
    Assert.Throws<ArgumentNullException>(() => obj.Method(null));
}

...

public class SomeRandomObject
{
    public void Method(object value)
    {
        if (value == null) throw new ArgumentNullException(nameof(value));
        ...
    }
}

显式错误显示为

显式 null 取消引用 (FORWARD_NULL)
var_deref_model:将null传递给Method,检查null后抛出异常。

【问题讨论】:

  • Something like this 可能但带有var_deref_model 事件标签?
  • 这看起来很有希望。愿意留下这个答案吗?我们会试一试,看看这是否能消除事件,但这肯定看起来正是我们想要的。
  • 我只发现用一些有创意的 Google-fu,完全不知道它是否会起作用。如果确实如此,将添加一个答案。
  • 我们正在等待覆盖率分析,我认为它每天晚上都会运行,我是团队中的新手,所以我不完全确定该部分构建的运行频率,将发布当我知道时更新评论。
  • 我们在这里尝试了多种方法,所以如果我发现什么有效,我会发布更新。

标签: c# coverity


【解决方案1】:

this site 为例,您可以在报告的错误行上方使用注释来抑制这些消息,但在您的情况下,您将使用var_deref_model 标记。例如:

// coverity[var_deref_model]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多