当我将字段设置为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);
但这似乎很愚蠢。有人对此有经验吗?我宁愿摆脱发现,还是先注销它。
答案 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));