将字段设置为Null时的Java Null取消引用-加强
当我将字段设置为Null时,Fortify正在抱怨Null取消引用:将字段设置为Null时的Java Null取消引用-加强,java,fortify,Java,Fortify,当我将字段设置为Null时,Fortify正在抱怨Null取消引用: String sortName = null; if (lastName != null && lastName.length() > 0) { sortName = lastName; } sortOptions.setSortField(sortName); <-- Fortify Null Dereference 我可以试试: if (sortName == null) so
String sortName = null;
if (lastName != null && lastName.length() > 0) {
sortName = lastName;
}
sortOptions.setSortField(sortName); <-- Fortify Null Dereference
我可以试试:
if (sortName == null)
sortOptions.setSortField(null);
else
sortOptions.setSortField(sortName);
但这似乎真的很愚蠢。有人有这方面的经验吗?我更愿意放弃这个发现,而不是直接将其注销。fortify不喜欢的是,您首先无条件地使用
null
初始化变量,然后更改它
这应该起作用:
String sortName;
if (lastName != null && lastName.length() > 0) {
sortName = lastName;
} else {
sortName = null;
}
sortOptions.setSortField(sortName);
(如果愿意,也可以使用三元运算符)
这样,您只需初始化一次sortName
,并明确表明null
值在某些情况下是正确的,而不是您忘记了某些情况,导致var在意外情况下保持null
空解引用错误位于代码
sortName=lastName的行上
不是setter的调用:fortify不希望您有条件地更改设置为null
的变量的值,而不在所有分支中这样做。Thierry的答案非常有效。这也通过了Fortify的扫描:
Optional<String> sortName = Optional.empty();
if (lastName != null && lastName.length() > 0) {
sortName = Optional.ofNullable(lastName);
}
sortOptions.setSortField(sortName.orElse(null));
Optional sortName=Optional.empty();
if(lastName!=null&&lastName.length()>0){
sortName=可选。不可用(姓氏);
}
sortOptions.setSortField(sortName.orElse(null));
如果将空值传递到setSortField
中会导致空指针,那么将显式空值传递到中将执行相同的操作。请显示a。如果仅为了测试,您执行String sortName=“”代码>添加了Fortify的分析跟踪,这表明取消对sortName的引用是问题所在。我们在代码中的许多地方将字段设置为“null”,而Fortify在这方面做得很好。我将尝试这个解决方案。不幸的是,我们的强化扫描需要几个小时才能运行。我会尽快更新我有更多的信息。。。thx Thierry此溶液通过强化扫描。谢谢你的意见!您应该能够在此处使用Optional.of
而不是of nullable
,因为您已经检查过它是否为空。
Optional<String> sortName = Optional.empty();
if (lastName != null && lastName.length() > 0) {
sortName = Optional.ofNullable(lastName);
}
sortOptions.setSortField(sortName.orElse(null));