RI.IGNOREDCALL

如果调用不可变类的方法,则会出现 RI.IGNOREDCALL 错误。方法存在副作用,并且其结果不会分配到变量(结果将被忽略)。因为当函数修改其类的值时,编程假设了不同的 API,所以可能发生这个问题。Klocwork 查找的方法是:

  • 任何返回字符串的 String 类的方法
  • StringBuffer 类中的 toString() 方法
  • InetAddress、BigInteger、BigDecimal 类的任何方法
  • MessageDigest 类中的 digest(byte[]) 方法

漏洞与风险

对方法行为的误解将导致应用程序逻辑中存在缺陷。

缓解与预防

存储方法所返回的值,例如 a.trim()

示例 1

复制
     public void write(String indent, Writer writer) {
         String description = getDescription();
         if (description != null)
             description.trim();
         // ...
         // write it
     }

针对第 16 行报告 RI.IGNOREDCALL:“java.lang.String.trim()”返回的值被忽略。

安全培训

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