将字段设置为null时Java Null取消引用-Fortify

时间:2019-06-04 16:39:39

标签: java fortify

当我将字段设置为null时,Fortify抱怨Null取消引用:

String sortName = null;
if (lastName != null && lastName.length() > 0) {
   sortName = lastName;
}
sortOptions.setSortField(sortName);  <--  Fortify Null Dereference

Fortify的分析轨迹显示:

Assigned null: sortName
Branch taken: if (lastName != null && lastName.length() > 0)
Dereferenced: sortName

我可以尝试:

if (sortName == null)
   sortOptions.setSortField(null);
else
   sortOptions.setSortField(sortName);

但这似乎很愚蠢。有人对此有经验吗?我宁愿摆脱发现,还是先注销它。

2 个答案:

答案 0 :(得分:2)

要点是,您首先使用null在没有条件的情况下初始化变量,然后再对其进行更改。

这应该有效:

String sortName;
if (lastName != null && lastName.length() > 0) {
   sortName = lastName;
} else {
   sortName = null;
}
sortOptions.setSortField(sortName);

(或根据需要使用三元运算符)

这样,您仅初始化一次sortName,并明确表明null值在某些情况下是正确的,而不是您忘记了某些情况,从而导致var停留{{1 }},这是意外的情况。

空解除引用错误是在代码null的行上,而不是setter的调用:forify不想让您有条件地更改设置为{的变量的值。 {1}},而不是在所有分支机构中都这样做。

答案 1 :(得分:0)

Thierry的答案非常有效。这也通过了Fortify的扫描:

Optional<String> sortName = Optional.empty();
if (lastName != null && lastName.length() > 0) {
   sortName = Optional.ofNullable(lastName);
}
sortOptions.setSortField(sortName.orElse(null));