CodeQL 文档

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

单击以在 CodeQL 存储库中查看查询

ZipOutputStream 类用于将 ZIP 文件写入文件或其他流。ZIP 文件由多个条目组成。通常,每个条目对应于要压缩的目录结构中的一个文件。ZipOutputStream 上有一个方法,其名称略显混乱,名为 putNextEntry。尽管其名称如此,但它不会写入整个条目。相反,它写入条目的元数据。然后使用 write 方法写入该条目的内容。最后,使用 closeEntry 关闭条目。

因此,如果你调用 putNextEntrycloseEntry,但省略对 write 的调用,则会将一个空 ZIP 文件条目写入输出流。

建议

确保包含对 ZipOutputStream.write 的调用。

示例

在以下示例中,archive 方法调用 putNextEntrycloseEntry,但省略了对 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();
	}
}

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私