首页 > 解决方案 > 将字段设置为 null 时的 Java Null 取消引用 - 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);

但这似乎真的很愚蠢。有人有这方面的经验吗?我宁愿摆脱这个发现而不是把它写下来。

标签: javafortify

解决方案


fortify 不喜欢的是你null先用无条件初始化变量,然后再改变它。

这应该工作:

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

(如果您愿意,也可以使用三元运算符)

这样你sortName只初始化一次,并明确地表明一个null值在某些情况下是正确的,而不是你忘记了某些情况,导致一个 var 在null意外时停留。

Null 取消引用错误出现在代码行上,而不是sortName = lastName;setter 的调用:fortify 不希望您有条件地更改设置为的变量的值,而null无需在所有分支中这样做。


推荐阅读