Я прочитал кучу других вопросов об отмене ссылок Fortify null здесь, но ни один из них не подходит или не кажется столь же базовым c, как тот, который возник в нашем проекте. При сканировании этого блока кода:
private GenderCode gender;
.
.
.
if (gender != null) {
subject.setGender(gender.getName());
} else {
subject.setGender(null);
}
Укажите флажки subject.setGender(null)
в качестве возможной нулевой отмены ссылки. Для меня это абсолютно бессмысленно - все, что мы делаем, это явно устанавливаем значение в нуль. Обратите внимание, что в локальном классе пол имеет тип GenderCode, а в предметном классе пол - это строка. Исходный код, который у нас был:
subject.setGender(gender != null ? gender.getName() : null);
, также был помечен. Какая переменная может быть разыменована здесь? Мы только устанавливаем атрибут на другом объекте в нуль! Совершенно законно. Кроме того, код специально устанавливает значение null в блоке if-then-else, который должен указывать для Fortify, что да, мы делаем это специально - мы знаем, что устанавливаем пол ( атрибут String объекта-объекта) в значение null. Почему это помечено и есть простое, не запутанное решение, которое успокаивает богов-укрепителей?