package cn.hutool.core.util; import java.io.File; import java.nio.charset.Charset; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; /** * Excerpt of hutool ZipUtil.unzip after CVE-2018-17297 (Zip Slip / CWE-22). * https://github.com/dromara/hutool/commit/8d7d0b7fb5ea4f7447b40131bffc1ec506a6528e */ public class ZipUtil { public static File unzip(File zipFile, File outFile, Charset charset) throws Exception { ZipFile zipFileObj = new ZipFile(zipFile, charset); Enumeration em = zipFileObj.entries(); while (em.hasMoreElements()) { ZipEntry zipEntry = em.nextElement(); File outItemFile = FileUtil.file(outFile, zipEntry.getName()); if (zipEntry.isDirectory()) { outItemFile.mkdirs(); } } zipFileObj.close(); return outFile; } }