【问题标题】:Sonar false-positive on rule: Null pointers should not be dereferenced声纳对规则的误报:不应取消引用空指针
【发布时间】:2016-10-14 16:23:46
【问题描述】:

我在这个电话minRating.getRatgCaam()有一个声纳警报

警报与声纳规则有关:不应取消引用空指针。

例如:

AgencyRating minRating = null;
.......
if (!getRatingUtilities().isNR(minRating)) {
    return minRating.getRatgCaam(); //Sonar: Null pointers should not be dereferenced
}

isNR(minRating) 方法是一个辅助方法,用于验证对象 minRating 是否为空

public boolean isNR(AgencyRating rating) {
    return rating == null || isNR(rating.getRatgCaam());
}

当我按照声纳的建议添加非空验证时。声纳没问题。

if (minRating !=null  && !getRatingUtilities().isNR(minRating)) {
    return minRating.getRatgCaam(); // no more alert
}

Sonar 无法确定辅助方法是否进行了 null 验证。我不需要再次进行此验证。

我的情况是误报吗?

【问题讨论】:

  • 这是误报,但最好不要在isNR 中进行null 签入。 rating.getRatgCaam() 版本有什么作用?

标签: java sonarqube


【解决方案1】:

这确实是一个误报,因为在撰写本文时,sonarqube java 分析器(撰写本文时为 4.2.1 版)不支持跨过程分析,因此它确实无法确定,对于条件为真,minRating 的值必须为非 null。

这是我们目前正在大力开发的一项功能,以便能够关闭此类误报。

【讨论】:

    【解决方案2】:

    现在(sonarqube java 分析器版本 4.3.0.7717)它受到支持并且工作正常

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 2020-10-15
      • 2013-08-06
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多