diff --git a/WHATSNEW b/WHATSNEW index 09aabe7b8..ecc54180c 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -670,6 +670,10 @@ Other changes: processor. Bugzilla Issue 46612. + * the ZIP library will now ignore ZIP extra fields that don't specify + a size. + Bugzilla Report 42940. + Changes from Ant 1.7.0 TO Ant 1.7.1 ============================================= diff --git a/src/main/org/apache/tools/zip/ExtraFieldUtils.java b/src/main/org/apache/tools/zip/ExtraFieldUtils.java index 0aa5cbd11..befd42322 100644 --- a/src/main/org/apache/tools/zip/ExtraFieldUtils.java +++ b/src/main/org/apache/tools/zip/ExtraFieldUtils.java @@ -117,10 +117,6 @@ public class ExtraFieldUtils { } start += (length + WORD); } - if (start != data.length) { // array not exhausted - throw new ZipException("data starting at " + start - + " is in unknown format"); - } ZipExtraField[] result = new ZipExtraField[v.size()]; return (ZipExtraField[]) v.toArray(result); diff --git a/src/main/org/apache/tools/zip/ZipEntry.java b/src/main/org/apache/tools/zip/ZipEntry.java index 3223454b9..d1e1deb2c 100644 --- a/src/main/org/apache/tools/zip/ZipEntry.java +++ b/src/main/org/apache/tools/zip/ZipEntry.java @@ -252,7 +252,7 @@ public class ZipEntry extends java.util.zip.ZipEntry implements Cloneable { try { setExtraFields(ExtraFieldUtils.parse(extra)); } catch (Exception e) { - throw new RuntimeException(e.getMessage()); + throw new RuntimeException(e.getMessage(), e); } } diff --git a/src/main/org/apache/tools/zip/ZipExtraField.java b/src/main/org/apache/tools/zip/ZipExtraField.java index 622ff1738..649fca005 100644 --- a/src/main/org/apache/tools/zip/ZipExtraField.java +++ b/src/main/org/apache/tools/zip/ZipExtraField.java @@ -64,7 +64,7 @@ public interface ZipExtraField { byte[] getLocalFileDataData(); /** - * The actual data to put central directory - without Header-ID or + * The actual data to put into central directory - without Header-ID or * length specifier. * @return the data * @since 1.1 diff --git a/src/tests/antunit/taskdefs/unzip-test.xml b/src/tests/antunit/taskdefs/unzip-test.xml index ed75de469..45a878f54 100644 --- a/src/tests/antunit/taskdefs/unzip-test.xml +++ b/src/tests/antunit/taskdefs/unzip-test.xml @@ -44,6 +44,16 @@ + + + + + + + + diff --git a/src/tests/antunit/taskdefs/zip/Bugzilla-46559.zip b/src/tests/antunit/taskdefs/zip/Bugzilla-46559.zip index 2f7566082..711402b6d 100644 Binary files a/src/tests/antunit/taskdefs/zip/Bugzilla-46559.zip and b/src/tests/antunit/taskdefs/zip/Bugzilla-46559.zip differ diff --git a/src/tests/junit/org/apache/tools/zip/ExtraFieldUtilsTest.java b/src/tests/junit/org/apache/tools/zip/ExtraFieldUtilsTest.java index c405138f7..13e07193e 100644 --- a/src/tests/junit/org/apache/tools/zip/ExtraFieldUtilsTest.java +++ b/src/tests/junit/org/apache/tools/zip/ExtraFieldUtilsTest.java @@ -40,7 +40,7 @@ public class ExtraFieldUtilsTest extends TestCase implements UnixStat { a.setDirectory(true); dummy = new UnrecognizedExtraField(); dummy.setHeaderId(new ZipShort(1)); - dummy.setLocalFileDataData(new byte[0]); + dummy.setLocalFileDataData(new byte[] {0}); dummy.setCentralDirectoryData(new byte[] {0}); aLocal = a.getLocalFileDataData(); @@ -68,7 +68,7 @@ public class ExtraFieldUtilsTest extends TestCase implements UnixStat { assertEquals("mode field 1", 040755, ((AsiExtraField) ze[0]).getMode()); assertTrue("type field 2", ze[1] instanceof UnrecognizedExtraField); - assertEquals("data length field 2", 0, + assertEquals("data length field 2", 1, ze[1].getLocalFileDataLength().getValue()); byte[] data2 = new byte[data.length-1];