首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Fortify将字段设置为Null时的Java空解引用

使用Fortify将字段设置为Null时的Java空解引用
EN

Stack Overflow用户
提问于 2021-01-27 09:15:42
回答 1查看 186关注 0票数 0

当我将一个字段设置为空时,Fortify会抱怨一个空的反引用:

代码语言:javascript
复制
ApplicanteeTO applicanteeTO = null;
    
if(applicanteeNRIC != null && !applicanteeNRIC.equals("")){
      if(!populationId.equals(Constants.POPTYPE1) && !populationId.equals(Constants.POPTYPE2)) {
          applicanteeTO = //retrieve from db
      }
}
        
log.debug("applicanteeTO details: " + applicanteeTO);

if(applicanteeTO != null){
    // do logic
}

我尝试做的是用null初始化ApplicanteeTO对象,然后检查它是否在某个填充类型下,填充它。如果不是,则将其保留为null。然而,Fortify在报告中向我发出了这样的警告:

代码语言:javascript
复制
The method initForm() in SingleReplacementController.java can crash the program by dereferencing a null-pointer on line 110. 

这条线指向记录器。我正在尝试消除Fortify发出的警告。有什么办法解决这个问题吗?

我可以这样做吗?

代码语言:javascript
复制
ApplicanteeTO applicanteeTO;
    
if(applicanteeNRIC != null && !applicanteeNRIC.equals("")){
      if(!populationId.equals(Constants.POPTYPE1) && !populationId.equals(Constants.POPTYPE2)) {
          applicanteeTO = //retrieve from db
      } 
} else {
     applicanteeTO = null;
}

log.debug("applicanteeTO details: " + applicanteeTO);

if(applicanteeTO != null){
    // do logic
}

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-01-27 09:55:27

如果Fortify在抱怨log.debug产品线,那么它(Fortify!)是不正确的。使用null连接字符串是安全的。它将null转换为"null",并将其连接起来。

所以你有几个选择:

  • 忽略该警告。

  • 禁止显示警告(如果Fortify允许)。

  • 重写该语句,例如:

//这个丑陋的代码是为了停止Fortify抱怨log.debug("applicanteeTO details:“+ (applicanteeTO == null:"null”:applicanteeTO));//或者使用if / else

幸运的是,JIT编译器将生成不对applicanteeTO执行多次null检查的代码。但这是版本相关的。

如果事情就像声明的那样,这确实是一个Fortify错误,那么你应该:

  • 检查是否有更新版本的Fortify可以修复此错误。
  • 将此错误报告给Fortify。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65911582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档