You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ju...@apache.org on 2009/12/13 21:08:00 UTC
svn commit: r890110 - in /commons/proper/compress/trunk/src:
main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
test/java/org/apache/commons/compress/archivers/ZipTestCase.java
Author: jukka
Date: Sun Dec 13 20:07:59 2009
New Revision: 890110
URL: http://svn.apache.org/viewvc?rev=890110&view=rev
Log:
COMPRESS-93: Support for alternative ZIP compression methods
Fix the Maven221MultiVolumeTest failure by not using skip() to skip bytes. The FileInputStream implementation of skip() will happily skip past the end of the file, so we never see the EOFException that Maven221MultiVolumeTest expects to see when closing a truncated entry.
Also added an explicit test case for the ability to skip entries with unsupported compression methods.
Modified:
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ZipTestCase.java
Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java?rev=890110&r1=890109&r2=890110&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java Sun Dec 13 20:07:59 2009
@@ -333,10 +333,7 @@
&& !hasDataDescriptor) {
long remaining = current.getCompressedSize() - bytesReadFromStream;
while (remaining > 0) {
- long n = in.skip(remaining);
- if (n == 0) { // skip() may return 0, use read() as a fallback
- n = in.read(buf, 0, (int) Math.min(buf.length, remaining));
- }
+ long n = in.read(buf, 0, (int) Math.min(buf.length, remaining));
if (n < 0) {
throw new EOFException(
"Truncated ZIP entry: " + current.getName());
Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ZipTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ZipTestCase.java?rev=890110&r1=890109&r2=890110&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ZipTestCase.java (original)
+++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/ZipTestCase.java Sun Dec 13 20:07:59 2009
@@ -29,6 +29,7 @@
import org.apache.commons.compress.AbstractTestCase;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.compress.utils.IOUtils;
@@ -130,6 +131,32 @@
}
/**
+ * Test case for being able to skip an entry in an
+ * {@link ZipArchiveInputStream} even if the compression method of that
+ * entry is unsupported.
+ *
+ * @see <a href="https://issues.apache.org/jira/browse/COMPRESS-93"
+ * >COMPRESS-93</a>
+ */
+ public void testSkipEntryWithUnsupportedCompressionMethod()
+ throws IOException {
+ ZipArchiveInputStream zip =
+ new ZipArchiveInputStream(new FileInputStream(getFile("moby.zip")));
+ try {
+ ZipArchiveEntry entry = zip.getNextZipEntry();
+ assertEquals("README", entry.getName());
+ assertFalse(entry.isSupportedCompressionMethod());
+ try {
+ assertNull(zip.getNextZipEntry());
+ } catch (IOException e) {
+ fail("COMPRESS-93: Unable to skip an unsupported zip entry");
+ }
+ } finally {
+ zip.close();
+ }
+ }
+
+ /**
* Checks if all entries from a nested archive can be read.
* The archive: OSX_ArchiveWithNestedArchive.zip contains:
* NestedArchiv.zip and test.xml3.