You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2018/07/11 16:52:54 UTC
[5/6] commons-compress git commit: COMPRESS-459 use ZipEncoding
consistently
COMPRESS-459 use ZipEncoding consistently
Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/c8ee9f78
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/c8ee9f78
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/c8ee9f78
Branch: refs/heads/master
Commit: c8ee9f781900f874b075433141de779723b3e110
Parents: 72bfc12
Author: Stefan Bodewig <bo...@apache.org>
Authored: Wed Jul 11 18:50:01 2018 +0200
Committer: Stefan Bodewig <bo...@apache.org>
Committed: Wed Jul 11 18:50:01 2018 +0200
----------------------------------------------------------------------
.../archivers/cpio/CpioArchiveEntry.java | 22 +++++++++++++-------
.../archivers/cpio/CpioArchiveOutputStream.java | 5 ++---
2 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/c8ee9f78/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
index 79e7542..6aeb7ce 100644
--- a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.java
@@ -18,11 +18,13 @@
*/
package org.apache.commons.compress.archivers.cpio;
+import java.nio.ByteBuffer;
import java.io.File;
-import java.nio.charset.Charset;
+import java.io.IOException;
import java.util.Date;
import org.apache.commons.compress.archivers.ArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipEncoding;
/**
* A cpio archive consists of a sequence of files. There are several types of
@@ -468,7 +470,7 @@ public class CpioArchiveEntry implements CpioConstants, ArchiveEntry {
* Get the number of bytes needed to pad the header to the alignment boundary.
*
* @deprecated This method doesn't properly work for multi-byte encodings. And
- * creates corrupt archives. Use {@link #getHeaderPadCount(Charset)}
+ * creates corrupt archives. Use {@link #getHeaderPadCount(ZipEncoding)}
* or {@link #getHeaderPadCount(long)} in any case.
* @return the number of bytes needed to pad the header (0,1,2,3)
*/
@@ -480,19 +482,25 @@ public class CpioArchiveEntry implements CpioConstants, ArchiveEntry {
/**
* Get the number of bytes needed to pad the header to the alignment boundary.
*
- * @param charset
- * The character set used to encode the entry name in the stream.
+ * @param encoding
+ * The encoding used to encode the entry name in the stream.
* @return the number of bytes needed to pad the header (0,1,2,3)
* @since 1.18
*/
- public int getHeaderPadCount(Charset charset) {
+ public int getHeaderPadCount(ZipEncoding encoding) {
if (name == null) {
return 0;
}
- if (charset == null) {
+ if (encoding == null) {
return getHeaderPadCount(name.length());
}
- return getHeaderPadCount(name.getBytes(charset).length);
+ try {
+ final ByteBuffer buf = encoding.encode(name);
+ return getHeaderPadCount(buf.limit() - buf.position());
+ } catch (IOException ex) {
+ // won't happen as the output stream has already encoded the name without error
+ throw new RuntimeException("cannot encode " + name, ex);
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/c8ee9f78/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
index afb57a2..73cf714 100644
--- a/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.java
@@ -22,7 +22,6 @@ import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.HashMap;
@@ -305,7 +304,7 @@ public class CpioArchiveOutputStream extends ArchiveOutputStream implements
writeAsciiLong(name.length + 1L, 8, 16);
writeAsciiLong(entry.getChksum(), 8, 16);
writeCString(name);
- pad(entry.getHeaderPadCount(Charset.forName(encoding)));
+ pad(entry.getHeaderPadCount(zipEncoding));
}
private void writeOldAsciiEntry(final CpioArchiveEntry entry)
@@ -368,7 +367,7 @@ public class CpioArchiveOutputStream extends ArchiveOutputStream implements
writeBinaryLong(name.length + 1L, 2, swapHalfWord);
writeBinaryLong(entry.getSize(), 4, swapHalfWord);
writeCString(name);
- pad(entry.getHeaderPadCount(Charset.forName(encoding)));
+ pad(entry.getHeaderPadCount(zipEncoding));
}
/*(non-Javadoc)