忽略调用的错误状态¶
ID: java/ignored-error-status-of-call
Kind: problem
Security severity:
Severity: recommendation
Precision: high
Tags:
- reliability
- correctness
- external/cwe/cwe-391
Query suites:
- java-security-and-quality.qls
Java 开发工具包中的许多方法(例如,请参阅以下参考)返回状态值(例如,作为 int
)以指示方法执行是否正常完成。如果方法未正常完成,它们可能会返回错误代码。如果未检查方法结果,则异常方法执行可能会导致后续代码失败。
建议¶
你应该插入附加代码来检查返回值并采取适当的操作。
示例¶
以下示例使用 java.io.InputStream.read
方法从输入流中读取 16 个字节并将其存储在数组中。但是,read
可能实际上无法读取尽可能多的字节,例如因为流已耗尽。因此,代码不应仅仅依赖于数组 b
从输入流中精确填充 16 个字节。相反,代码应该检查方法的返回值,该返回值指示实际读取的字节数。
java.io.InputStream is = (...);
byte[] b = new byte[16];
is.read(b);
参考¶
SEI CERT Oracle Java 编码标准:EXP00-J. 不要忽略方法返回的值。
Java API 规范:java.util.Queue.offer。
Java API 规范:java.util.concurrent.BlockingQueue.offer。
Java API 规范,java.util.concurrent.locks.Condition:await,awaitUntil,awaitNanos。
Java API 规范,java.io.File:createNewFile,delete,mkdir,renameTo,setLastModified,setReadOnly,setWritable(boolean),setWritable(boolean, boolean)。
Java API 规范,java.io.InputStream:skip,read(byte[]),read(byte[], int, int)。
常见弱点枚举:CWE-391。