[COMPRESS-677] ZipArchiveOutputStream.setEncoding(String) with a null
value throws IllegalArgumentException
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 838db8f..de89b46 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -50,6 +50,7 @@
<action type="fix" issue="COMPRESS-674" dev="ggregory" due-to="Gren Elliot">Validate TarArchiveEntry checksums #500.</action>
<action type="fix" issue="COMPRESS-676" dev="ecki" due-to="Martin Schneider">OSGi: Remove unresolvable dependencies in manifest and make the commons-io packages really optional.</action>
<action type="fix" dev="ggregory" due-to="Gary Gregory">Avoid possible NullPointerException in org.apache.commons.compress.utils.Sets.newHashSet(E...).</action>
+ <action type="fix" issue="COMPRESS-677" dev="ggregory" due-to="Jeffrey Adamson, Gary Gregory">ZipArchiveOutputStream.setEncoding(String) with a null value throws IllegalArgumentException.</action>
<!-- UPDATE -->
<action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.apache.commons:commons-parent from 66 to 69 #495, #508.</action>
<action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump org.ow2.asm:asm from 9.6 to 9.7 #504.</action>
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
index 89948f7..488b3d8 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
@@ -38,6 +38,7 @@
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.utils.ByteUtils;
+import org.apache.commons.io.Charsets;
/**
* Reimplementation of {@link java.util.zip.ZipOutputStream java.util.zip.ZipOutputStream} to handle the extended functionality of this package, especially
@@ -1337,7 +1338,7 @@
* @param encoding the encoding to use for file names, use null for the platform's default encoding
*/
public void setEncoding(final String encoding) {
- setEncoding(Charset.forName(encoding));
+ setEncoding(Charsets.toCharset(encoding));
}
/**
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStreamTest.java
index a60e3a8..9bba9c0 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStreamTest.java
@@ -16,11 +16,14 @@
*/
package org.apache.commons.compress.archivers.zip;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import org.apache.commons.compress.AbstractTempDirTest;
import org.junit.jupiter.api.Test;
@@ -43,4 +46,14 @@
assertFalse(stream.isSeekable());
}
}
+
+ @Test
+ public void testSetEncoding() throws IOException {
+ try (ZipArchiveOutputStream stream = new ZipArchiveOutputStream(createTempFile())) {
+ stream.setEncoding(StandardCharsets.UTF_8.name());
+ assertEquals(StandardCharsets.UTF_8.name(), stream.getEncoding());
+ stream.setEncoding(null);
+ assertEquals(Charset.defaultCharset().name(), stream.getEncoding());
+ }
+ }
}