From 02a38a4f521d7195cfc15be9abf91c4dbffcfafa Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 1 Aug 2024 23:08:53 +0800 Subject: [PATCH] =?UTF-8?q?zip=E5=8E=8B=E7=BC=A9=E5=88=B0=E6=9C=AC?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E6=97=B6=E5=8F=AF=E8=83=BD=E9=80=A0=E6=88=90?= =?UTF-8?q?=E7=9A=84=E6=AD=BB=E5=BE=AA=E7=8E=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 ++- .../cn/hutool/core/compress/ZipWriter.java | 7 +++++++ .../hutool/core/compress/IssueIAGYDGTest.java | 21 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 hutool-core/src/test/java/cn/hutool/core/compress/IssueIAGYDGTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index bdaad4205..c6df258e9 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.30(2024-07-31) +# 5.8.30(2024-08-01) ### 🐣新特性 * 【core 】 Converter转换规则变更,空对象、空值转为Bean时,创建默认对象,而非null(issue#3649@Github) @@ -26,6 +26,7 @@ * 【core 】 修复IdcardUtil.isValidHKCard校验问题(issue#IAFOLI@Gitee) * 【core 】 修复Convert.digitToChinese(0)输出金额无`元整问题`(issue#3662@Github) * 【core 】 修复CsvParser中对正文中双引号处理逻辑问题(pr#1244@Gitee) +* 【core 】 修复ZipUtil.zip压缩到本目录时可能造成的死循环问题(issue#IAGYDG@Gitee) ------------------------------------------------------------------------------------------------------------- # 5.8.29(2024-07-03) diff --git a/hutool-core/src/main/java/cn/hutool/core/compress/ZipWriter.java b/hutool-core/src/main/java/cn/hutool/core/compress/ZipWriter.java index fef99f062..ff724b747 100755 --- a/hutool-core/src/main/java/cn/hutool/core/compress/ZipWriter.java +++ b/hutool-core/src/main/java/cn/hutool/core/compress/ZipWriter.java @@ -48,6 +48,7 @@ public class ZipWriter implements Closeable { return new ZipWriter(out, charset); } + private File zipFile; private final ZipOutputStream out; /** @@ -57,6 +58,7 @@ public class ZipWriter implements Closeable { * @param charset 编码 */ public ZipWriter(File zipFile, Charset charset) { + this.zipFile = zipFile; this.out = getZipOutputStream(zipFile, charset); } @@ -254,6 +256,11 @@ public class ZipWriter implements Closeable { } } } else { + // issue#IAGYDG 检查加入的文件是否为压缩结果文件本身,避免死循环 + if (FileUtil.equals(file, zipFile)) { + return this; + } + // 如果是文件或其它符号,则直接压缩该文件 putEntry(subPath, FileUtil.getInputStream(file)); } diff --git a/hutool-core/src/test/java/cn/hutool/core/compress/IssueIAGYDGTest.java b/hutool-core/src/test/java/cn/hutool/core/compress/IssueIAGYDGTest.java new file mode 100644 index 000000000..2841988c0 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/compress/IssueIAGYDGTest.java @@ -0,0 +1,21 @@ +package cn.hutool.core.compress; + +import cn.hutool.core.util.ZipUtil; +import org.junit.Ignore; +import org.junit.Test; + +import java.io.File; + +/** + * https://gitee.com/dromara/hutool/issues/IAGYDG + */ +public class IssueIAGYDGTest { + @Test + @Ignore + public void zipTest() { + // 第一次压缩后,IssueIAGYDG.zip也会作为文件压缩到IssueIAGYDG.zip中,导致死循环 + final File filea = new File("d:/test/"); + final File fileb = new File("d:/test/IssueIAGYDG.zip"); + ZipUtil.zip(fileb, false, filea.listFiles()); + } +}