java - 正确性 - 对先前取消引用的值进行 Nullcheck,尝试使用资源时出现 FOD 问题

标签 java fortify

在我的代码中,我在尝试使用资源时在输入流上遇到“正确性 - 先前取消引用的值的 Nullcheck”Fortify 问题。

@Bean
public String publicKey() throws IOException {
    URL resourceUrl = getClass().getClassLoader().getResource("something.txt");
    try (InputStream inputStream = resourceUrl.openStream()) {
        **BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));**

错误在缓冲读取器初始化行中抛出。

资源 URL 取自:

URL resourceUrl = getClass().getClassLoader().getResource("something.txt");

如何在尝试资源场景时解决这个问题?

最佳答案

我能够修复(干净的 SonarQube 报告)此问题,如下所示:

方法 1:try with resource 有默认的 null 检查,因此为了避免冗余的取消引用 null 检查问题,将语句移出 try with resource。

URL resourceUrl = getClass().getClassLoader().getResource("something");

    final StringBuilder builder = new StringBuilder();
    try {
        InputStream inputStream = resourceUrl.openStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        try {
            bufferedReader.lines().forEach(builder::append);
        } finally {
            bufferedReader.close();
            inputStream.close();
        }
    } catch (IOException ex){ //rethrow the same and handle in the calling function }

注意:当finally block 抛出与代码其余部分相同的异常时(这在java.io操作中很常见),这种在try...catch中嵌套try...finally的风格特别有用。

方法二:简单地去掉try block ,让函数抛出IOException并直接在调用函数中处理。

关于java - 正确性 - 对先前取消引用的值进行 Nullcheck,尝试使用资源时出现 FOD 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59423396/

相关文章:

java - 从 Firebase 读取数据并将其保存在数组列表中

java - 如何在 java 文档中搜索 100 万个字符串?

java - 我的 N-Queens 解决方案有什么问题?

java - URLEncoder.encode(string, "UTF-8") 是一个糟糕的验证吗?

java - 强化 : Null dereference for Java 8

使用 https 和 pem 证书的 Java 客户端

java - Optional.ofNullable 与Optional.fromNullable 之间有什么区别

java - 文件名的路径操作错误修复

java - 字符串文字和 J2EE 不良实践 : Non-Serializable Object Stored in Session

java - java 中的preparedStatement 上的HP Fortify SQL 注入(inject)问题