创建空 ZIP 文件条目¶
ID: java/empty-zip-file-entry
Kind: problem
Security severity:
Severity: warning
Precision: medium
Tags:
- reliability
- readability
Query suites:
- java-security-and-quality.qls
ZipOutputStream 类用于将 ZIP 文件写入文件或其他流。ZIP 文件由多个条目组成。通常,每个条目对应于要压缩的目录结构中的一个文件。ZipOutputStream 上有一个方法,其名称略显混乱,名为 putNextEntry。尽管其名称如此,但它不会写入整个条目。相反,它写入条目的元数据。然后使用 write 方法写入该条目的内容。最后,使用 closeEntry 关闭条目。
因此,如果你调用 putNextEntry 和 closeEntry,但省略对 write 的调用,则会将一个空 ZIP 文件条目写入输出流。
建议¶
确保包含对 ZipOutputStream.write 的调用。
示例¶
在以下示例中,archive 方法调用 putNextEntry 和 closeEntry,但省略了对 write 的调用。
class Archive implements Closeable
{
private ZipOutputStream zipStream;
public Archive(File zip) throws IOException {
OutputStream stream = new FileOutputStream(zip);
stream = new BufferedOutputStream(stream);
zipStream = new ZipOutputStream(stream);
}
public void archive(String name, byte[] content) throws IOException {
ZipEntry entry = new ZipEntry(name);
zipStream.putNextEntry(entry);
// Missing call to 'write'
zipStream.closeEntry();
}
public void close() throws IOException {
zipStream.close();
}
}
参考¶
Java API 规范: ZipOutputStream。