COMPRESS-200 aftermaths, we never guarantee ZipEncoding#encode returned a ByteBuffer with position() 0 - even though it always in right now
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/compress/trunk@1426326 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java b/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
index 0a38336..a9f2dbd 100644
--- a/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
+++ b/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
@@ -354,7 +354,7 @@
while (b.limit() > length && len > 0) {
b = encoding.encode(name.substring(0, --len));
}
- final int limit = b.limit();
+ final int limit = b.limit() - b.position();
System.arraycopy(b.array(), b.arrayOffset(), buf, offset, limit);
// Pad any remaining output bytes with NUL
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 06bcf6a..f251c43 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
@@ -936,7 +936,8 @@
written += SHORT;
// file name
- writeOut(name.array(), name.arrayOffset(), name.limit());
+ writeOut(name.array(), name.arrayOffset(),
+ name.limit() - name.position());
written += name.limit();
// extra field
@@ -959,7 +960,8 @@
ze.addExtraField(new UnicodePathExtraField(ze.getName(),
name.array(),
name.arrayOffset(),
- name.limit()));
+ name.limit()
+ - name.position()));
}
String comm = ze.getComment();
@@ -973,7 +975,8 @@
ze.addExtraField(new UnicodeCommentExtraField(comm,
commentB.array(),
commentB.arrayOffset(),
- commentB.limit())
+ commentB.limit()
+ - commentB.position())
);
}
}
@@ -1107,7 +1110,8 @@
written += WORD;
// file name
- writeOut(name.array(), name.arrayOffset(), name.limit());
+ writeOut(name.array(), name.arrayOffset(),
+ name.limit() - name.position());
written += name.limit();
// extra field
@@ -1115,7 +1119,8 @@
written += extra.length;
// file comment
- writeOut(commentB.array(), commentB.arrayOffset(), commentB.limit());
+ writeOut(commentB.array(), commentB.arrayOffset(),
+ commentB.limit() - commentB.position());
written += commentB.limit();
}
@@ -1181,7 +1186,8 @@
// ZIP file comment
ByteBuffer data = this.zipEncoding.encode(comment);
writeOut(ZipShort.getBytes(data.limit()));
- writeOut(data.array(), data.arrayOffset(), data.limit());
+ writeOut(data.array(), data.arrayOffset(),
+ data.limit() - data.position());
}
private static final byte[] ONE = ZipLong.getBytes(1L);
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java
index 2d0ef4e..a4468af 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java
@@ -272,7 +272,8 @@
ze.addExtraField(new UnicodePathExtraField(ze.getName(),
en.array(),
en.arrayOffset(),
- en.limit()));
+ en.limit()
+ - en.position()));
}
zos.putArchiveEntry(ze);
@@ -288,7 +289,8 @@
ze.addExtraField(new UnicodePathExtraField(ze.getName(),
en.array(),
en.arrayOffset(),
- en.limit()));
+ en.limit()
+ - en.position()));
}
zos.putArchiveEntry(ze);
@@ -305,7 +307,8 @@
ze.addExtraField(new UnicodePathExtraField(ze.getName(),
en.array(),
en.arrayOffset(),
- en.limit()));
+ en.limit()
+ - en.position()));
}
zos.putArchiveEntry(ze);
@@ -364,7 +367,8 @@
ByteBuffer ne = enc.encode(ze.getName());
CRC32 crc = new CRC32();
- crc.update(ne.array(),ne.arrayOffset(),ne.limit());
+ crc.update(ne.array(), ne.arrayOffset(),
+ ne.limit() - ne.position());
assertEquals(crc.getValue(), ucpf.getNameCRC32());
assertEquals(expectedName, new String(ucpf.getUnicodeName(),