创建空 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。