java - 将字段设置为 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);
但这似乎真的很愚蠢。有人有这方面的经验吗?我宁愿摆脱这个发现而不是把它写下来。
解决方案
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
无需在所有分支中这样做。
推荐阅读
- sql - 我们如何使用立即执行将完整的 sql 查询从表传递到 PL/SQL 中的插入语句
- python - 创建没有重复的字典
- php - SimpleXML 显示特定属性的值
- c - C 中带 void 和不带 void 的 main 函数
- javascript - Vue:加载静态脚本
- python - 导入错误:python for 3.7 但在 2.7 中没有错误
- wordpress - 在运输 woocommerce 中添加额外费用
- vb6 - VB6 redim 错误“此数组已修复或暂时锁定”
- javascript - 不使用 CSS 的 JavaScript 移动过渡
- swift - PDFKit 注释保存文本注释