【问题标题】:Why does Fortify SCA flag some Java ternary conditions as Always false or Always true为什么 Fortify SCA 将某些 Java 三元条件标记为 Always false 或 Always true
【发布时间】:2022-02-02 23:20:02
【问题描述】:

我最近查看了很多 Fortify 的发现,我试图了解为什么 Fortify SCA 将一些(不是全部)Java 三元条件标记为“始终为假”或“始终为真”。以下示例。
任何人都可以提供对此的见解吗?提前致谢。

这些例子都在实体类中。

这被标记为“始终为假”。

public void setGmtInd(String gmtInd) {
    this.gmtInd = gmtInd != null ? gmtInd.toUpperCase() : gmtInd;
}

这被标记为“始终正确”。

public void setDefaultValueInd(String defaultValueInd) {
    this.defaultValueInd = defaultValueInd != null ? defaultValueInd.toUpperCase() : defaultValueInd;
}

这未被标记为发现。

public void setUserid(String userid) {
    this.userid = userid != null ? userid.toUpperCase() : userid;
}

【问题讨论】:

  • 检查所有呼叫。
  • 感谢@JoopEggen 您的评论让我回过头来深入研究这个应用程序。现在是时候更正一些代码了。

标签: java fortify ternary


【解决方案1】:

我深入研究了应用程序代码,发现了以下内容。
标记为 Always false 的那些总是以空值调用。

this.setGmtInd(null);

标记为 Always true 的那些总是使用硬编码值调用。

this.setDefaultValueInd("Y");
this.setDefaultValueInd("N");

那些没有被标记的当然是被正确使用了。

this.setUserid("");
this.setUserid(cmosUser.getUserid());

我很抱歉在这个问题上浪费了你的时间……下一次,我会先深入挖掘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 2022-06-10
    • 2012-06-10
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多