NPE.RET

如果尝试取消引用 null 值,将引发 NullPointerException。取消引用可以是函数调用、字段读取或写入,或数组访问。当在某个路径上来自某个方法调用的值返回空值时,取消引用方法调用将导致报告 NPE.RET。

从 2023.2 版本开始,此检查器将支持 Jakarta EE。

示例 1

复制
     Reader getReader(String configurationPath) throws IOException {
         File file = new File(configurationPath);
         if (file.exists()) {
             return new BufferedReader(new FileReader(file));
         }
         return null;
     }
 
 
     Reader getDefaultReader() throws IOException {
         return getReader("conf");
     }
 
     public void init() throws IOException {
         load(getDefaultReader());
     }
 
     private String load(Reader reader) throws IOException {
         StringBuffer sb = new StringBuffer();
 
         char[] buffer = new char[1024];
         int length;
         while ((length = reader.read(buffer)) > 0) {
             sb.append(buffer, 0, length);
         }
         return sb.toString();
     }

针对第 29 行报告 NPE.RET,因为 getDefaultReader() 调用返回的值可能为 null,而它又作为参数被传递到 load(Reader reader) 方法中,在此将取消引用它。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。

扩展

此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 Java 分析。