diff --git a/src/main/org/apache/tools/zip/NioZipEncoding.java b/src/main/org/apache/tools/zip/NioZipEncoding.java index bef8cf355..4853d2e9f 100644 --- a/src/main/org/apache/tools/zip/NioZipEncoding.java +++ b/src/main/org/apache/tools/zip/NioZipEncoding.java @@ -20,6 +20,7 @@ package org.apache.tools.zip; import java.io.IOException; +import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; @@ -102,8 +103,8 @@ class NioZipEncoding implements ZipEncoding { } } - out.limit(out.position()); - out.rewind(); + ZipEncodingHelper.prepareBufferForRead(out); + return out; } diff --git a/src/main/org/apache/tools/zip/Simple8BitZipEncoding.java b/src/main/org/apache/tools/zip/Simple8BitZipEncoding.java index f70e02cbe..b3c1132b9 100644 --- a/src/main/org/apache/tools/zip/Simple8BitZipEncoding.java +++ b/src/main/org/apache/tools/zip/Simple8BitZipEncoding.java @@ -20,6 +20,7 @@ package org.apache.tools.zip; import java.io.IOException; +import java.nio.Buffer; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; @@ -247,8 +248,7 @@ class Simple8BitZipEncoding implements ZipEncoding { } } - out.limit(out.position()); - out.rewind(); + ZipEncodingHelper.prepareBufferForRead(out); return out; } diff --git a/src/main/org/apache/tools/zip/ZipEncodingHelper.java b/src/main/org/apache/tools/zip/ZipEncodingHelper.java index 8e670d584..be6b0ecbb 100644 --- a/src/main/org/apache/tools/zip/ZipEncodingHelper.java +++ b/src/main/org/apache/tools/zip/ZipEncodingHelper.java @@ -18,6 +18,7 @@ package org.apache.tools.zip; +import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException; @@ -147,15 +148,25 @@ public abstract class ZipEncodingHelper { * */ static ByteBuffer growBuffer(final ByteBuffer b, final int newCapacity) { - b.limit(b.position()); - b.rewind(); - + prepareBufferForRead(b); final int c2 = b.capacity() * 2; final ByteBuffer on = ByteBuffer.allocate(c2 < newCapacity ? newCapacity : c2); on.put(b); return on; } + + /** + * Prepares a buffer to be read after writing. + * + * @param b The buffer + */ + static void prepareBufferForRead(final Buffer b) { + // ByteBuffer has overridden methods in java 11 but not in java 8 + // so the Buffer is significant to get java 8 compatible classes + b.limit(b.position()); + b.rewind(); + } /**